using System;
using System.Collections;
using DG.Tweening;
using GameWorld;
using I2.Loc;
using UnityEngine;

public class StoryE15P3 : BaseBehaviour
{
	private bool e15Finish
	{
		set
		{
			SaveStorage.Set("E15_Finish", value);
		}
	}

	private void Start()
	{
		R.Audio.PlayBGM(371, true);
		this.gate.openType = SceneGate.OpenType.None;
		R.Ui.HideUI(true);
	}

	private void Update()
	{
		if (this.spwanPoint.position.x - R.Player.Transform.position.x < 14f && !this.show)
		{
			this.show = true;
			base.StartCoroutine(this.P3Coroutine());
		}
	}

	private void OnEnable()
	{
		EventManager.RegisterEvent<EventArgs>("EnemyKilled", new EventManager.FBEventHandler<EventArgs>(this.EnemyDie), EventManager.ListenerQueue.Game);
	}

	private void OnDisable()
	{
		EventManager.UnregisterEvent<EventArgs>("EnemyKilled", new EventManager.FBEventHandler<EventArgs>(this.EnemyDie), EventManager.ListenerQueue.Game);
	}

	private bool EnemyDie(string eventName, object sender, EventArgs msg)
	{
		this.enemyDie = true;
		return true;
	}

	private IEnumerator P3Coroutine()
	{
		InputSetting.Stop(false);
		R.Player.ActionController.StartMove();
		yield return new WaitForSeconds(1f);
		R.Player.ActionController.StopMove();
		yield return new WaitForSeconds(3f);
		R.Camera.Controller.IsFollowPivot = false;
		R.Camera.Controller.CameraMoveTo(new Vector2(this.spwanPoint.position.x, R.Camera.Controller.MovableCamera.position.y), 1.5f, Ease.Linear);
		yield return new WaitForSeconds(3f);
		this.effect.SetActive(true);
		this.effect.GetComponent<Animation>().Play("Appear", PlayMode.StopAll);
		yield return new WaitForSeconds(0.2f);
		Singleton<EnemyGenerator>.Instance.GenerateEnemy(EnemyType.黄衣老者, new Vector2?(this.spwanPoint.position), false, true);
		R.Audio.PlayEffect(370, new Vector3?(this.spwanPoint.position));
		yield return new WaitForSeconds(2f);
		R.Camera.Controller.IsFollowPivot = true;
		InputSetting.Resume(false);
		while (!this.enemyDie)
		{
			yield return null;
		}
		yield return R.Audio.PlayEffect(478, null).clip.length;
		yield return R.Ui.Terminal.OpenWithAnim(new Color?(Color.yellow));
		yield return R.Ui.Terminal.Println(ScriptLocalization.Story.e15s1, 0.1f);
		this.e15Finish = true;
		R.Trophy.AwardTrophy(18);
		yield return SaveManager.ModifySaveData(delegate(GameData gameData)
		{
			if (gameData.ThisSaveValidStorage.ContainsKey("E15_Finish"))
			{
				gameData.ThisSaveValidStorage["E15_Finish"] = 1;
			}
			else
			{
				gameData.ThisSaveValidStorage.Add("E15_Finish", 1);
			}
		});
		yield return new WaitForSeconds(3f);
		CameraFilterUtils.Remove<CameraFilterPack_EyesVision_2>(null);
		R.Ui.BlackScene.Alpha = 1f;
		yield return R.Ui.Terminal.CloseWithAnim();
		yield return new WaitForSeconds(1f);
		R.Ui.BlackScene.Alpha = 0f;
		R.Ui.ShowUI(true);
		yield return R.Ui.LevelSelect.OpenWithAnim(true, true);
		yield break;
	}

	private bool enemyDie;

	[SerializeField]
	private Transform spwanPoint;

	[SerializeField]
	private GameObject effect;

	[SerializeField]
	private SceneGate gate;

	private bool show;
}