BattleField.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System;
  5. namespace YLBattle
  6. {
  7. /// <summary>
  8. /// 战场中,主逻辑推进....
  9. /// </summary>
  10. public partial class BattleField : IBattleInnerOper
  11. {
  12. /// <summary>
  13. /// 本次战斗详细上下文数据
  14. /// </summary>
  15. private BattleParam mBattleParam = null;
  16. /// <summary>
  17. /// 战斗是否已经结束
  18. /// </summary>
  19. private bool isBattleFinish = false;
  20. /// <summary>
  21. /// 获取当前战场上下文环境信息
  22. /// </summary>
  23. /// <returns>上下文环境信息</returns>
  24. public BattleParam Env()
  25. {
  26. return this.mBattleParam;
  27. }
  28. #region 战场状态驱动
  29. /// <summary>
  30. /// 当前执行策略
  31. /// </summary>
  32. private Policy mCurrentPolicy = null;
  33. /// <summary>
  34. /// 战斗准备策略
  35. /// </summary>
  36. private Policy mReadyPolicy = null;
  37. /// <summary>
  38. /// 战斗停止策略
  39. /// </summary>
  40. private Policy mStopPolicy = null;
  41. /// <summary>
  42. /// 战斗入场策略
  43. /// </summary>
  44. private Policy mArrivalPolicy = null;
  45. /// <summary>
  46. /// 战斗离场策略
  47. /// </summary>
  48. private Policy mLeavePolicy = null;
  49. /// <summary>
  50. /// 战斗策略
  51. /// </summary>
  52. private Policy mFightingPolicy = null;
  53. /// <summary>
  54. /// 战前策略
  55. /// </summary>
  56. private Policy mPrewarPolicy = null;
  57. /// <summary>
  58. /// 战斗胜利策略
  59. /// </summary>
  60. private Policy mVictoryPolicy = null;
  61. /// <summary>
  62. /// 战斗失败策略
  63. /// </summary>
  64. private Policy mFailedPolicy = null;
  65. /// <summary>
  66. /// 超时策略
  67. /// </summary>
  68. private Policy mTimeoutPolicy = null;
  69. #endregion
  70. #region 分支策略 定义:可受主策略单向操纵, 不受游戏暂停影响
  71. /// <summary>
  72. /// 当前分支策略
  73. /// </summary>
  74. private Policy mSubPolicy = null;
  75. /// <summary>
  76. /// 战斗开始动画策略
  77. /// </summary>
  78. private Policy mWarningPolicy = null;
  79. /// <summary>
  80. /// 战斗开始动画策略
  81. /// </summary>
  82. private Policy mCriticalPolicy = null;
  83. /// <summary>
  84. /// 波次出现,Boss出场动画策略
  85. /// </summary>
  86. private Policy mBossPolicy = null;
  87. /// <summary>
  88. /// 释放技能
  89. /// </summary>
  90. private Policy mSkillPolicy = null;
  91. /// <summary>
  92. /// 释放技能
  93. /// </summary>
  94. private Policy mBossSkillPolicy = null;
  95. #endregion
  96. /// <summary>
  97. /// 初始化
  98. /// </summary>
  99. /// <param name="param">上下文环境信息</param>
  100. public void Initialize(BattleParam param)
  101. {
  102. this.isBattleFinish = false;
  103. this.mBattleParam = param;
  104. this.mCurrentPolicy = null;
  105. this.mSubPolicy = null;
  106. // 初始化策略
  107. this.mReadyPolicy = new PolicyReady(this.mBattleParam);
  108. this.mStopPolicy = new PolicyStop(this.mBattleParam);
  109. this.mArrivalPolicy = new PolicyArrival(this.mBattleParam);
  110. this.mLeavePolicy = new PolicyLeave(this.mBattleParam);
  111. this.mFightingPolicy = new PolicyFighting(this.mBattleParam);
  112. this.mVictoryPolicy = new PolicyVictory(this.mBattleParam);
  113. this.mFailedPolicy = new PolicyFailed(this.mBattleParam);
  114. this.mTimeoutPolicy = new PolicyTimeout(this.mBattleParam);
  115. this.mPrewarPolicy = new PolicyPrewar(this.mBattleParam);
  116. this.mWarningPolicy = new PolicyWarning(this.mBattleParam);
  117. this.mCriticalPolicy = new PolicyCritical(this.mBattleParam);
  118. this.mBossPolicy = new PolicyBoss(this.mBattleParam);
  119. this.mSkillPolicy = new PolicySkillTip(this.mBattleParam);
  120. this.mBossSkillPolicy = new PolicyBossSkill(this.mBattleParam);
  121. this.ChangeFieldPolicy(EBattleStaus.EBATTLE_STATUS_READY, null);
  122. }
  123. /// <summary>
  124. /// 周期调度
  125. /// </summary>
  126. /// <returns>战场策略当前调度状态</returns>
  127. public EBattleUpdateStatus OnUpdate(long longNow)
  128. {
  129. if (null == this.mCurrentPolicy)
  130. {
  131. return EBattleUpdateStatus.Complete;
  132. }
  133. // 分支策略调度
  134. if (null != this.mSubPolicy)
  135. {
  136. this.mSubPolicy.OnUpdate(longNow);
  137. if (this.mSubPolicy.IsComplete())
  138. {
  139. this.ChangeFieldSubPolicy(EBattleStaus.EBATTLE_STATUS_NONE, null);
  140. }
  141. }
  142. // 策略调度
  143. this.mCurrentPolicy.OnUpdate(longNow);
  144. return EBattleUpdateStatus.Continue;
  145. }
  146. #region 策略驱动
  147. /// <summary>
  148. /// 更改战场子策略
  149. /// </summary>
  150. /// <param name="substatus">状态标识</param>
  151. /// <param name="param">传递参数</param>
  152. public void ChangeFieldSubPolicy(EBattleStaus substatus, object param)
  153. {
  154. if (null != this.mSubPolicy && substatus != this.mSubPolicy.Type())
  155. {
  156. this.mSubPolicy.OnLeave();
  157. }
  158. switch (substatus)
  159. {
  160. case EBattleStaus.EBATTLE_STATUS_WARNING:
  161. this.mSubPolicy = this.mWarningPolicy;
  162. break;
  163. case EBattleStaus.EBATTLE_STATUS_CRITICAL:
  164. this.mSubPolicy = this.mCriticalPolicy;
  165. break;
  166. case EBattleStaus.EBATTLE_STATUS_BOSS:
  167. this.mSubPolicy = this.mBossPolicy;
  168. break;
  169. case EBattleStaus.EBATTLE_STATUS_SKILL:
  170. this.mSubPolicy = this.mSkillPolicy;
  171. break;
  172. case EBattleStaus.EBATTLE_STATUS_BOSSSKILL:
  173. this.mSubPolicy = this.mBossSkillPolicy;
  174. break;
  175. default:
  176. this.mSubPolicy = null;
  177. break;
  178. }
  179. if (null != this.mSubPolicy)
  180. {
  181. this.mSubPolicy.OnEnter(param);
  182. }
  183. }
  184. /// <summary>
  185. /// 更改当前战场策略
  186. /// </summary>
  187. /// <param name="status">状态标识</param>
  188. /// <param name="param">传递参数</param>
  189. public void ChangeFieldPolicy(EBattleStaus status, object param)
  190. {
  191. if (null != this.mCurrentPolicy && status != this.mCurrentPolicy.Type())
  192. {
  193. this.mCurrentPolicy.OnLeave();
  194. }
  195. switch (status)
  196. {
  197. case EBattleStaus.EBATTLE_STATUS_STOP:
  198. this.mCurrentPolicy = this.mStopPolicy;
  199. break;
  200. case EBattleStaus.EBATTLE_STATUS_READY:
  201. this.mCurrentPolicy = this.mReadyPolicy;
  202. break;
  203. case EBattleStaus.EBATTLE_STATUS_LEAVE:
  204. this.mCurrentPolicy = this.mLeavePolicy;
  205. break;
  206. case EBattleStaus.EBATTLE_STATUS_PREWAR:
  207. this.mCurrentPolicy = this.mPrewarPolicy;
  208. break;
  209. case EBattleStaus.EBATTLE_STATUS_FIGHTING:
  210. this.mCurrentPolicy = this.mFightingPolicy;
  211. break;
  212. case EBattleStaus.EBATTLE_STATUS_ARRIVAL:
  213. this.mCurrentPolicy = this.mArrivalPolicy;
  214. break;
  215. case EBattleStaus.EBATTLE_STATUS_VICTORY:
  216. this.mCurrentPolicy = this.mVictoryPolicy;
  217. break;
  218. case EBattleStaus.EBATTLE_STATUS_FAILED:
  219. this.mCurrentPolicy = this.mFailedPolicy;
  220. break;
  221. case EBattleStaus.EBATTLE_STATUS_TIMEOUT:
  222. this.mCurrentPolicy = this.mTimeoutPolicy;
  223. break;
  224. default:
  225. this.mCurrentPolicy = null;
  226. break;
  227. }
  228. if (null != this.mCurrentPolicy)
  229. {
  230. this.mCurrentPolicy.OnEnter(param);
  231. }
  232. }
  233. /// <summary>
  234. /// 获取当前战场策略
  235. /// </summary>
  236. /// <returns>当前策略类型</returns>
  237. public Policy CurrentPoilcy()
  238. {
  239. return this.mCurrentPolicy;
  240. }
  241. /// <summary>
  242. /// 获取当前子策略
  243. /// </summary>
  244. /// <returns>当前子策略</returns>
  245. public Policy CurrentSubPolicy()
  246. {
  247. return this.mSubPolicy;
  248. }
  249. #endregion
  250. }
  251. }