LogicFighterFSM.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. using UnityEngine;
  2. using System.Collections;
  3. using System;
  4. namespace YLBattle
  5. {
  6. public class LogicFighterFSM
  7. {
  8. /// <summary>
  9. /// 上下文环境
  10. /// </summary>
  11. private BattleParam mGlobalParam = null;
  12. /// <summary>
  13. /// 隶属战斗对象
  14. /// </summary>
  15. private LogicFighter mOwner = null;
  16. /// <summary>
  17. /// 全局状态
  18. /// </summary>
  19. private BaseState mMainState = null;
  20. /// <summary>
  21. /// 当前状态
  22. /// </summary>
  23. private BaseState mCurrentState = null;
  24. /// <summary>
  25. /// 上一个状态
  26. /// </summary>
  27. private BaseState mPreviousState = null;
  28. #region(行为状态)
  29. /// <summary>
  30. /// 空闲状态
  31. /// </summary>
  32. private StateIdle mStateIdle = null;
  33. /// <summary>
  34. /// 死亡状态
  35. /// </summary>
  36. private StateDead mStateDead = null;
  37. /// <summary>
  38. /// 受击状态
  39. /// </summary>
  40. private StateHit mStateOnHit = null;
  41. /// <summary>
  42. /// 施法状态
  43. /// </summary>
  44. private StateAttack mStateAttack = null;
  45. /// <summary>
  46. /// 等待状态
  47. /// </summary>
  48. private StateHidden mStateHidden = null;
  49. /// <summary>
  50. /// 消失状态
  51. /// </summary>
  52. private StateDisapper mStateDisapper = null;
  53. /// <summary>
  54. /// 出场状态
  55. /// </summary>
  56. private StateArrival mStateArrival = null;
  57. /// <summary>
  58. /// 旋转状态
  59. /// </summary>
  60. private StateRoatate mStateRoatate = null;
  61. /// <summary>
  62. /// 等待状态
  63. /// </summary>
  64. private StateWait mStateWait = null;
  65. /// <summary>
  66. /// 打断当前状态
  67. /// </summary>
  68. public void BreakCurrentState()
  69. {
  70. this.ChangeState(BaseState.EFighterState.IDLE, false);
  71. }
  72. /// <summary>
  73. /// 获取上一次状态
  74. /// </summary>
  75. /// <returns>状态对象</returns>
  76. public BaseState GetPreviousState()
  77. {
  78. return this.mPreviousState;
  79. }
  80. #endregion
  81. /// <summary>
  82. /// 初始化
  83. /// </summary>
  84. /// <param name="param">环境配置信息</param>
  85. /// <param name="fighter">战斗对象</param>
  86. public void Initialize(BattleParam param, LogicFighter fighter)
  87. {
  88. this.mMainState = null;
  89. this.mGlobalParam = param;
  90. this.mOwner = fighter;
  91. this.mStateIdle = new StateIdle(this.mOwner, this.mGlobalParam);
  92. this.mStateOnHit = new StateHit(this.mOwner, this.mGlobalParam);
  93. this.mStateDead = new StateDead(this.mOwner, this.mGlobalParam);
  94. this.mStateAttack = new StateAttack(this.mOwner, this.mGlobalParam);
  95. this.mStateHidden = new StateHidden(this.mOwner, this.mGlobalParam);
  96. this.mStateDisapper = new StateDisapper(this.mOwner, this.mGlobalParam);
  97. this.mStateArrival = new StateArrival(this.mOwner, this.mGlobalParam);
  98. this.mStateRoatate = new StateRoatate(this.mOwner, this.mGlobalParam);
  99. this.mStateWait = new StateWait(this.mOwner, this.mGlobalParam);
  100. this.SetCurrentState(this.mStateHidden, null);
  101. }
  102. /// <summary>
  103. /// 设置当前状态
  104. /// </summary>
  105. /// <param name="current">状态</param>
  106. /// <param name="param">参数</param>
  107. public void SetCurrentState(BaseState current, object param)
  108. {
  109. this.mCurrentState = current;
  110. this.mCurrentState.OnEnter(param);
  111. }
  112. /// <summary>
  113. /// 获取当前行为状态
  114. /// </summary>
  115. /// <returns>状态对象</returns>
  116. public BaseState GetCurrentState()
  117. {
  118. return this.mCurrentState;
  119. }
  120. /// <summary>
  121. /// 状态周期调度
  122. /// </summary>
  123. /// <param name="now">当前逻辑时间</param>
  124. public void OnUpdateState(long now)
  125. {
  126. if (null != this.mCurrentState)
  127. {
  128. this.mCurrentState.OnUpdate();
  129. }
  130. }
  131. /// <summary>
  132. /// 切换到指定状态
  133. /// </summary>
  134. /// <param name="newState">新的状态</param>
  135. /// <param name="param">状态初始化参数</param>
  136. public void ChangeState(BaseState.EFighterState newState, object param)
  137. {
  138. BaseState st = null;
  139. switch (newState)
  140. {
  141. case BaseState.EFighterState.IDLE:
  142. st = this.mStateIdle;
  143. break;
  144. case BaseState.EFighterState.Attack:
  145. st = this.mStateAttack;
  146. break;
  147. case BaseState.EFighterState.ONHIT:
  148. st = this.mStateOnHit;
  149. break;
  150. case BaseState.EFighterState.DEAD:
  151. st = this.mStateDead;
  152. break;
  153. case BaseState.EFighterState.HIDDEN:
  154. st = this.mStateHidden;
  155. break;
  156. case BaseState.EFighterState.DISAPPER:
  157. st = this.mStateDisapper;
  158. break;
  159. case BaseState.EFighterState.ARRIVAL:
  160. st = this.mStateArrival;
  161. break;
  162. case BaseState.EFighterState.ROTATE:
  163. st = this.mStateRoatate;
  164. break;
  165. case BaseState.EFighterState.WAIT:
  166. st = this.mStateWait;
  167. break;
  168. default:
  169. st = null;
  170. break;
  171. }
  172. if (null == st)
  173. {
  174. return;
  175. }
  176. this.mCurrentState.OnLeave();
  177. this.mPreviousState = this.mCurrentState;
  178. this.mCurrentState = st;
  179. this.mCurrentState.OnEnter(param);
  180. }
  181. }
  182. }