BloodPalaceManager.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using System;
  2. using System.Collections;
  3. using System.Text.RegularExpressions;
  4. using GameWorld;
  5. using UnityEngine;
  6. using UnityEngine.SceneManagement;
  7. public class BloodPalaceManager : BaseBehaviour
  8. {
  9. private BloodPalaceManager()
  10. {
  11. }
  12. private void Awake()
  13. {
  14. if (BloodPalaceManager.Instance == null)
  15. {
  16. BloodPalaceManager.Instance = this;
  17. }
  18. else
  19. {
  20. UnityEngine.Object.Destroy(base.gameObject);
  21. }
  22. UnityEngine.Object.DontDestroyOnLoad(this);
  23. }
  24. private void Start()
  25. {
  26. this._listener = R.Player.GetComponent<PlayerAnimEventListener>();
  27. this._listener.OnPlayerDead += this.OnPlayerDead;
  28. SingletonMono<BattleAssessmentManager>.Instance.EnterBloodPalace();
  29. }
  30. private void OnEnable()
  31. {
  32. SceneManager.sceneLoaded += this.SceneManagerOnSceneLoaded;
  33. EventManager.RegisterEvent<BattleEventArgs>("Battle", new EventManager.FBEventHandler<BattleEventArgs>(this.BattleEventReceiver), EventManager.ListenerQueue.Game);
  34. EventManager.RegisterEvent<PassGateEventArgs>("PassGate", new EventManager.FBEventHandler<PassGateEventArgs>(this.OnPassGate), EventManager.ListenerQueue.Game);
  35. }
  36. private void OnDisable()
  37. {
  38. this._listener.OnPlayerDead -= this.OnPlayerDead;
  39. SceneManager.sceneLoaded -= this.SceneManagerOnSceneLoaded;
  40. EventManager.UnregisterEvent<BattleEventArgs>("Battle", new EventManager.FBEventHandler<BattleEventArgs>(this.BattleEventReceiver), EventManager.ListenerQueue.Game);
  41. EventManager.UnregisterEvent<PassGateEventArgs>("PassGate", new EventManager.FBEventHandler<PassGateEventArgs>(this.OnPassGate), EventManager.ListenerQueue.Game);
  42. BloodPalaceManager.Instance = null;
  43. }
  44. private void OnPlayerDead(object sender, EventArgs e)
  45. {
  46. if (!R.SceneData.BloodPalaceMode)
  47. {
  48. return;
  49. }
  50. R.SceneData.CanAIRun = false;
  51. base.StartCoroutine(this.LevelResult(true));
  52. }
  53. private bool BattleEventReceiver(string eventDefine, object sender, BattleEventArgs msg)
  54. {
  55. if (msg.Status == BattleEventArgs.BattleStatus.End)
  56. {
  57. this._coroutine = base.StartCoroutine(this.LevelResult(false));
  58. }
  59. return true;
  60. }
  61. private void SceneManagerOnSceneLoaded(Scene arg0, LoadSceneMode loadSceneMode)
  62. {
  63. if (!Regex.IsMatch(arg0.name, "palace[1-5]"))
  64. {
  65. if (this._coroutine != null)
  66. {
  67. base.StopCoroutine(this._coroutine);
  68. }
  69. R.Ui.BloodPalace.CloseLevelResult(false);
  70. SingletonMono<MobileInputPlayer>.Instance.MainControllerVisiable = true;
  71. SingletonMono<BattleAssessmentManager>.Instance.ExitBloodPalace();
  72. UnityEngine.Object.Destroy(base.gameObject);
  73. }
  74. }
  75. private bool OnPassGate(string eventDefine, object sender, PassGateEventArgs msg)
  76. {
  77. if (msg.Status == PassGateEventArgs.PassGateStatus.Enter)
  78. {
  79. if (this._coroutine != null)
  80. {
  81. base.StopCoroutine(this._coroutine);
  82. }
  83. R.Ui.BloodPalace.CloseLevelResult(false);
  84. SingletonMono<MobileInputPlayer>.Instance.MainControllerVisiable = true;
  85. }
  86. return true;
  87. }
  88. private IEnumerator LevelResult(bool load)
  89. {
  90. yield return new WaitForSeconds(0.1f);
  91. SingletonMono<MobileInputPlayer>.Instance.MainControllerVisiable = false;
  92. yield return R.Ui.BloodPalace.OpenLevelResult();
  93. yield return new WaitForSeconds(5f);
  94. yield return R.Ui.BloodPalace.CloseLevelResult(true);
  95. SingletonMono<MobileInputPlayer>.Instance.MainControllerVisiable = true;
  96. if (load)
  97. {
  98. LevelManager.OnPlayerDie(true);
  99. }
  100. yield break;
  101. }
  102. public static BloodPalaceManager Instance;
  103. private PlayerAnimEventListener _listener;
  104. private Coroutine _coroutine;
  105. }