Mode.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. using System;
  2. using System.Collections.Generic;
  3. using Core;
  4. public class Mode
  5. {
  6. public Mode()
  7. {
  8. Mode.SetInputMode(Mode.AllMode.Normal);
  9. }
  10. public Mode.AllMode CurrentMode
  11. {
  12. get
  13. {
  14. return this._currentMode;
  15. }
  16. }
  17. public bool IsInNormalMode()
  18. {
  19. return this._currentMode == Mode.AllMode.Normal;
  20. }
  21. public bool IsInBattleMode()
  22. {
  23. return this._currentMode == Mode.AllMode.Battle;
  24. }
  25. public bool IsInStoryMode()
  26. {
  27. return this._currentMode == Mode.AllMode.Story;
  28. }
  29. public bool IsInUIMode()
  30. {
  31. return this._currentMode == Mode.AllMode.UI;
  32. }
  33. public bool IsInShiMode()
  34. {
  35. return this._currentMode == Mode.AllMode.Shi;
  36. }
  37. public void Reset()
  38. {
  39. this._modeStack.Clear();
  40. this._currentMode = Mode.AllMode.Normal;
  41. Mode.SetInputMode(Mode.AllMode.Normal);
  42. InputSetting.Assistant = true;
  43. InputSetting.Resume(true);
  44. }
  45. public void EnterMode(Mode.AllMode nextMode)
  46. {
  47. this.LogBefore(nextMode, true);
  48. this._modeStack.Push(this._currentMode);
  49. Mode.SetInputMode(nextMode);
  50. this._currentMode = nextMode;
  51. this.LogAfter(nextMode, true);
  52. if (nextMode == Mode.AllMode.UI || nextMode == Mode.AllMode.Story)
  53. {
  54. SingletonMono<MobileInputPlayer>.Instance.Visible = false;
  55. }
  56. }
  57. public void ExitMode(Mode.AllMode mode)
  58. {
  59. this.LogBefore(mode, false);
  60. if (this._currentMode != mode)
  61. {
  62. Log.Error(string.Concat(new object[]
  63. {
  64. "当前模式与退出意图不符,当前模式为 ",
  65. this._currentMode,
  66. " 退出模式为",
  67. mode
  68. }));
  69. return;
  70. }
  71. if (this._modeStack.Count == 0)
  72. {
  73. Log.Error("没有状态可以退出");
  74. return;
  75. }
  76. Mode.AllMode allMode = this._modeStack.Pop();
  77. Mode.SetInputMode(allMode);
  78. this._currentMode = allMode;
  79. this.LogAfter(mode, false);
  80. if (mode == Mode.AllMode.UI || mode == Mode.AllMode.Story)
  81. {
  82. SingletonMono<MobileInputPlayer>.Instance.Visible = true;
  83. }
  84. }
  85. private void LogBefore(Mode.AllMode mode, bool isEnter)
  86. {
  87. Log.Info(string.Format("当前模式{0},{2}模式:{1}", this._currentMode, mode, (!isEnter) ? "退出" : "进入"));
  88. }
  89. private void LogAfter(Mode.AllMode mode, bool isEnter)
  90. {
  91. Log.Info(string.Format("{1}模式成功,当前模式{0}", this._currentMode, (!isEnter) ? "退出" : "进入"));
  92. }
  93. private static void SetInputMode(Mode.AllMode mode)
  94. {
  95. switch (mode)
  96. {
  97. case Mode.AllMode.Normal:
  98. Mode.SetAllGameInputState(true);
  99. Input.Game.Search.IsOpen = true;
  100. Mode.SetAllUIInputState(false);
  101. Input.UI.Pause.IsOpen = true;
  102. Input.UI.Debug.IsOpen = true;
  103. Mode.SetAllStoryInputState(false);
  104. Mode.SetAllShiInputState(false);
  105. break;
  106. case Mode.AllMode.Battle:
  107. Mode.SetAllGameInputState(true);
  108. Input.Game.Search.IsOpen = false;
  109. Mode.SetAllUIInputState(false);
  110. Input.UI.Pause.IsOpen = true;
  111. Input.UI.Debug.IsOpen = true;
  112. Mode.SetAllStoryInputState(false);
  113. Mode.SetAllShiInputState(false);
  114. break;
  115. case Mode.AllMode.Story:
  116. Mode.SetAllGameInputState(false);
  117. Mode.SetAllUIInputState(false);
  118. Mode.SetAllStoryInputState(true);
  119. Mode.SetAllShiInputState(false);
  120. break;
  121. case Mode.AllMode.UI:
  122. Mode.SetAllGameInputState(false);
  123. Mode.SetAllUIInputState(true);
  124. Mode.SetAllStoryInputState(false);
  125. Mode.SetAllShiInputState(false);
  126. break;
  127. case Mode.AllMode.Shi:
  128. Mode.SetAllGameInputState(false);
  129. Mode.SetAllUIInputState(false);
  130. Input.UI.Debug.IsOpen = true;
  131. Mode.SetAllStoryInputState(false);
  132. Mode.SetAllShiInputState(true);
  133. break;
  134. }
  135. }
  136. private static void SetAllGameInputState(bool open)
  137. {
  138. Input.Game.MoveDown.IsOpen = open;
  139. Input.Game.MoveUp.IsOpen = open;
  140. Input.Game.MoveLeft.IsOpen = open;
  141. Input.Game.MoveRight.IsOpen = open;
  142. Input.Game.Atk.IsOpen = open;
  143. Input.Game.CirtAtk.IsOpen = open;
  144. Input.Game.Jump.IsOpen = open;
  145. Input.Game.Flash.Left.IsOpen = open;
  146. Input.Game.Flash.Right.IsOpen = open;
  147. Input.Game.Flash.Up.IsOpen = open;
  148. Input.Game.Flash.Down.IsOpen = open;
  149. Input.Game.Flash.RightUp.IsOpen = open;
  150. Input.Game.Flash.LeftUp.IsOpen = open;
  151. Input.Game.Flash.RightDown.IsOpen = open;
  152. Input.Game.Flash.LeftDown.IsOpen = open;
  153. Input.Game.Flash.FaceDirection.IsOpen = open;
  154. Input.Game.UpRising.IsOpen = open;
  155. Input.Game.HitGround.IsOpen = open;
  156. Input.Game.Charging.IsOpen = open;
  157. Input.Game.Execute.IsOpen = open;
  158. Input.Game.Defence.IsOpen = open;
  159. Input.Game.JumpDown.IsOpen = open;
  160. Input.Game.Chase.IsOpen = open;
  161. Input.Game.FlashAttack.IsOpen = open;
  162. Input.Game.BladeStorm.IsOpen = open;
  163. Input.Game.ShadeAtk.IsOpen = open;
  164. Input.Game.Search.IsOpen = open;
  165. Input.Game.L2.IsOpen = open;
  166. Input.Game.R2.IsOpen = open;
  167. }
  168. private static void SetAllUIInputState(bool open)
  169. {
  170. Input.UI.Down.IsOpen = open;
  171. Input.UI.Up.IsOpen = open;
  172. Input.UI.Left.IsOpen = open;
  173. Input.UI.Right.IsOpen = open;
  174. Input.UI.Confirm.IsOpen = open;
  175. Input.UI.Cancel.IsOpen = open;
  176. Input.UI.Pause.IsOpen = open;
  177. Input.UI.Debug.IsOpen = open;
  178. }
  179. private static void SetAllStoryInputState(bool open)
  180. {
  181. Input.Story.Skip.IsOpen = open;
  182. Input.Story.BackGame.IsOpen = open;
  183. }
  184. private static void SetAllShiInputState(bool open)
  185. {
  186. Input.Shi.Down.IsOpen = open;
  187. Input.Shi.Up.IsOpen = open;
  188. Input.Shi.Left.IsOpen = open;
  189. Input.Shi.Right.IsOpen = open;
  190. Input.Shi.Jump.IsOpen = open;
  191. Input.Shi.Pause.IsOpen = open;
  192. }
  193. private readonly Stack<Mode.AllMode> _modeStack = new Stack<Mode.AllMode>();
  194. private Mode.AllMode _currentMode;
  195. public enum AllMode
  196. {
  197. Normal,
  198. Battle,
  199. Story,
  200. UI,
  201. Shi
  202. }
  203. }