using System;
using System.Collections;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using UnityEngine.Video;

// Token: 0x020000CB RID: 203
public class PlayVideo : MonoBehaviour, IPointerDownHandler, IEventSystemHandler
{
	// Token: 0x060012A1 RID: 4769 RVA: 0x001683EC File Offset: 0x001665EC
	public void Setup(string type, Cinematics cine)
	{
		if (Links.x.sensory)
		{
			Records.x.SetTypingState(true);
			Records.x.RemoveControls(true);
		}
		this.waitingCinematic = cine;
		this.video.enabled = false;
		this.videoImg.enabled = false;
		if (this.rt != null)
		{
			this.rt.Release();
		}
		RenderTextureFormat renderTextureFormat = RenderTextureFormat.ARGBHalf;
		this.rt = new RenderTexture(this.videoWidth, this.videoHeight, 24, renderTextureFormat);
		this.video.targetTexture = this.rt;
		this.videoImg.texture = this.rt;
		this.done = false;
		this.clicked = false;
		this.clickCount = 0;
		RenderTexture active = RenderTexture.active;
		RenderTexture.active = this.rt;
		GL.Clear(true, true, Color.black);
		RenderTexture.active = active;
		Time.timeScale = 1f;
		this.skipText.enabled = false;
		this.skipText.spriteAsset = Links.x.GetSpriteSheetAsset(Links.x.gameplay.currentSpriteSheetAsset);
		this.str.Clear();
		this.str.Append("Skip ");
		this.str.Append("   <voffset=.4em><size=50><sprite=");
		if (Links.x.mk)
		{
			int keyIconIndex = Links.x.keyControl.GetKeyIconIndex("LMB");
			this.str.Append(keyIconIndex);
			this.str.Append("></size></voffset>");
		}
		else
		{
			int controllerSprite = Links.x.gameplay.GetControllerSprite("Cancel", Links.x.gameplay.controllerName);
			this.str.Append(controllerSprite);
			this.str.Append("></size></voffset>");
		}
		this.skipText.text = this.str.ToString();
		this.video.enabled = false;
		if (type == "Throat")
		{
			if (Records.x.linux)
			{
				this.video.clip = this.throatLinux;
			}
			else if (!Records.x.linux && (Records.x.windows7 || Records.x.alwaysPlayTranscodedVideo))
			{
				this.video.clip = this.throatWindows7;
			}
			else
			{
				this.video.clip = this.throat;
			}
		}
		else if (type == "Standoff")
		{
			if (Records.x.linux)
			{
				this.video.clip = this.standoffLinux;
			}
			else if (!Records.x.linux && (Records.x.windows7 || Records.x.alwaysPlayTranscodedVideo))
			{
				this.video.clip = this.standoffWindows7;
			}
			else
			{
				this.video.clip = this.standoff;
			}
		}
		else if (type == "Flyover")
		{
			if (Records.x.linux)
			{
				this.video.clip = this.flyoverLinux;
			}
			else if (!Records.x.linux && (Records.x.windows7 || Records.x.alwaysPlayTranscodedVideo))
			{
				this.video.clip = this.flyoverWindows7;
			}
			else
			{
				this.video.clip = this.flyover;
			}
		}
		this.video.isLooping = false;
		this.clicked = false;
		this.video.targetTexture = this.rt;
		this.videoImg.texture = this.rt;
		this.videoImg.color = new Color(1f, 1f, 1f, 0f);
		this.blackBackground.color = new Color(0f, 0f, 0f, 0f);
		this.skipText.color = new Color(this.skipText.color.r, this.skipText.color.g, this.skipText.color.b, 0f);
		this.video.SetDirectAudioVolume(0, Links.x.options.musicVolume);
		base.gameObject.SetActive(true);
		this.video.enabled = true;
		this.video.started += this.VideoStarted;
		this.frameCount = (int)this.video.frameCount;
	}

	// Token: 0x060012A2 RID: 4770 RVA: 0x00168866 File Offset: 0x00166A66
	private void OnDestroy()
	{
		if (this.rt != null)
		{
			this.rt.Release();
		}
	}

	// Token: 0x060012A3 RID: 4771 RVA: 0x00168884 File Offset: 0x00166A84
	private void Update()
	{
		float num = this.rectTransformBlack.sizeDelta.x;
		float num2 = this.rectTransformBlack.sizeDelta.y;
		float num3 = (float)Screen.width / (float)Screen.height;
		float num4 = 1.7777778f;
		if (num3 != num4)
		{
			if (num3 > num4)
			{
				num = num2 * num4;
			}
			else
			{
				num2 = num / num4;
			}
		}
		this.rectTransform.sizeDelta = new Vector2(num, num2);
	}

	// Token: 0x060012A4 RID: 4772 RVA: 0x001688EB File Offset: 0x00166AEB
	public void VideoStarted(VideoPlayer vp)
	{
		base.StartCoroutine(this.VideoStarting());
	}

	// Token: 0x060012A5 RID: 4773 RVA: 0x001688FC File Offset: 0x00166AFC
	private bool Clicked()
	{
		if (Links.x.joy)
		{
			if (Links.x.gameplay.cancelStart)
			{
				this.clicked = true;
				return true;
			}
		}
		else if (Input.GetMouseButtonUp(0) && this.clickCount >= 0)
		{
			this.clicked = true;
			return true;
		}
		return false;
	}

	// Token: 0x060012A6 RID: 4774 RVA: 0x0016894A File Offset: 0x00166B4A
	private IEnumerator VideoStarting()
	{
		Links.x.gaia.FadeOutPlaylist(true, 0.25f);
		Links.x.gaia.FadeOutPlaylist(false, 0.25f);
		if (this.video.clip == this.flyover || this.video.clip == this.flyoverLinux)
		{
			this.video.playbackSpeed = 0f;
			this.textObject.SetActive(true);
			this.skipText.enabled = false;
			float timeToLerp = 1f;
			float percentage = 0f;
			float startTime = Time.time;
			while (percentage < 1f)
			{
				percentage = (Time.time - startTime) / timeToLerp;
				yield return null;
			}
			this.skipText.enabled = true;
			timeToLerp = 0.5f;
			percentage = 0f;
			startTime = Time.time;
			while (percentage < 1f)
			{
				if (this.Clicked())
				{
					break;
				}
				percentage = (Time.time - startTime) / timeToLerp;
				this.skipText.color = Color.Lerp(new Color(this.skipText.color.r, this.skipText.color.g, this.skipText.color.b, 0f), new Color(this.skipText.color.r, this.skipText.color.g, this.skipText.color.b, 1f), percentage);
				yield return null;
			}
			while (this.textObject.activeSelf && !this.Clicked())
			{
				yield return null;
			}
			this.textObject.SetActive(false);
			yield return new WaitForSeconds(0.01f);
			this.clicked = false;
			this.skipText.enabled = false;
			this.video.playbackSpeed = 1f;
		}
		this.videoImg.enabled = true;
		float timeToLerp2 = 0.001f;
		float percentage2 = 0f;
		float startTime2 = Time.time;
		while (percentage2 < 1f)
		{
			percentage2 = (Time.time - startTime2) / timeToLerp2;
			yield return null;
		}
		bool throatVideo = false;
		if (this.video.clip == this.throat || this.video.clip == this.throatLinux)
		{
			throatVideo = true;
		}
		timeToLerp2 = 0.5f;
		percentage2 = 0f;
		startTime2 = Time.time;
		while (percentage2 < 1f)
		{
			percentage2 = (Time.time - startTime2) / timeToLerp2;
			Color color = new Color(1f, 1f, 1f, 0f);
			Color color2 = new Color(0f, 0f, 0f, 0f);
			Color color3 = new Color(1f, 1f, 1f, 1f);
			Color color4 = new Color(0f, 0f, 0f, 1f);
			this.videoImg.color = Color.Lerp(color, color3, percentage2);
			this.blackBackground.color = Color.Lerp(color2, color4, percentage2);
			yield return null;
		}
		timeToLerp2 = 0.5f;
		percentage2 = 0f;
		startTime2 = Time.time;
		while (percentage2 < 1f)
		{
			percentage2 = (Time.time - startTime2) / timeToLerp2;
			yield return null;
		}
		this.skipText.enabled = true;
		timeToLerp2 = 0.5f;
		percentage2 = 0f;
		startTime2 = Time.time;
		while (percentage2 < 1f && !this.Clicked())
		{
			percentage2 = (Time.time - startTime2) / timeToLerp2;
			this.skipText.color = Color.Lerp(new Color(this.skipText.color.r, this.skipText.color.g, this.skipText.color.b, 0f), new Color(this.skipText.color.r, this.skipText.color.g, this.skipText.color.b, 1f), percentage2);
			yield return null;
		}
		int frameTarget = this.frameCount;
		if (throatVideo)
		{
			frameTarget = 2545;
		}
		else
		{
			frameTarget = this.frameCount - 10;
		}
		while (this.video.frame < (long)frameTarget && !this.Clicked() && !this.clicked)
		{
			yield return null;
		}
		this.skipText.enabled = false;
		timeToLerp2 = 0.3f;
		percentage2 = 0f;
		startTime2 = Time.time;
		while (percentage2 < 1f)
		{
			percentage2 = (Time.time - startTime2) / timeToLerp2;
			Color color5 = new Color(1f, 1f, 1f, 0f);
			Color color6 = new Color(0f, 0f, 0f, 0f);
			this.videoImg.color = Color.Lerp(Color.white, color5, percentage2);
			this.blackBackground.color = Color.Lerp(Color.black, color6, percentage2);
			yield return null;
		}
		this.EndReached();
		yield break;
	}

	// Token: 0x060012A7 RID: 4775 RVA: 0x0016895C File Offset: 0x00166B5C
	public void EndReached()
	{
		if (!this.done)
		{
			this.video.enabled = false;
			this.videoImg.enabled = false;
			if (this.video.clip == this.throat || this.video.clip == this.throatLinux)
			{
				this.waitingCinematic.videoFinished = true;
			}
			else if (this.video.clip == this.standoff || this.video.clip == this.standoffLinux)
			{
				this.waitingCinematic.videoFinished = true;
			}
			else if (this.video.clip == this.flyover || this.video.clip == this.flyoverLinux)
			{
				this.waitingCinematic.videoFinished = true;
			}
		}
		this.video.started -= this.VideoStarted;
		this.done = true;
		if (this.rt != null)
		{
			this.rt.Release();
		}
		base.gameObject.SetActive(false);
	}

	// Token: 0x060012A8 RID: 4776 RVA: 0x00168A88 File Offset: 0x00166C88
	public void OnPointerDown(PointerEventData eventData)
	{
		if (!this.done)
		{
			this.clickCount++;
			if (this.clickCount > 1 && Time.timeSinceLevelLoad >= this.clickTime + 0.5f)
			{
				this.clickCount = 0;
			}
			if (this.clickCount == 1)
			{
				this.clickTime = Time.timeSinceLevelLoad;
			}
		}
	}

	// Token: 0x04001ECA RID: 7882
	public VideoPlayer video;

	// Token: 0x04001ECB RID: 7883
	public VideoClip throat;

	// Token: 0x04001ECC RID: 7884
	public VideoClip throatLinux;

	// Token: 0x04001ECD RID: 7885
	public VideoClip throatWindows7;

	// Token: 0x04001ECE RID: 7886
	public VideoClip standoff;

	// Token: 0x04001ECF RID: 7887
	public VideoClip standoffLinux;

	// Token: 0x04001ED0 RID: 7888
	public VideoClip standoffWindows7;

	// Token: 0x04001ED1 RID: 7889
	public VideoClip flyover;

	// Token: 0x04001ED2 RID: 7890
	public VideoClip flyoverLinux;

	// Token: 0x04001ED3 RID: 7891
	public VideoClip flyoverWindows7;

	// Token: 0x04001ED4 RID: 7892
	public RawImage videoImg;

	// Token: 0x04001ED5 RID: 7893
	public Image blackBackground;

	// Token: 0x04001ED6 RID: 7894
	private int clickCount;

	// Token: 0x04001ED7 RID: 7895
	private float clickTime;

	// Token: 0x04001ED8 RID: 7896
	private bool done;

	// Token: 0x04001ED9 RID: 7897
	public Cinematics waitingCinematic;

	// Token: 0x04001EDA RID: 7898
	public int frameCount = 100;

	// Token: 0x04001EDB RID: 7899
	public TextMeshProUGUI skipText;

	// Token: 0x04001EDC RID: 7900
	private bool clicked;

	// Token: 0x04001EDD RID: 7901
	private StringFast str = new StringFast(32);

	// Token: 0x04001EDE RID: 7902
	public RectTransform rectTransform;

	// Token: 0x04001EDF RID: 7903
	public RectTransform rectTransformBlack;

	// Token: 0x04001EE0 RID: 7904
	public int videoWidth;

	// Token: 0x04001EE1 RID: 7905
	public int videoHeight;

	// Token: 0x04001EE2 RID: 7906
	public GameObject textObject;

	// Token: 0x04001EE3 RID: 7907
	private RenderTexture rt;
}
