123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using System;
- namespace YLBattle
- {
- /// <summary>
- /// 战场中,主逻辑推进....
- /// </summary>
- public partial class BattleField : IBattleInnerOper
- {
- /// <summary>
- /// 本次战斗详细上下文数据
- /// </summary>
- private BattleParam mBattleParam = null;
- /// <summary>
- /// 战斗是否已经结束
- /// </summary>
- private bool isBattleFinish = false;
- /// <summary>
- /// 获取当前战场上下文环境信息
- /// </summary>
- /// <returns>上下文环境信息</returns>
- public BattleParam Env()
- {
- return this.mBattleParam;
- }
- #region 战场状态驱动
- /// <summary>
- /// 当前执行策略
- /// </summary>
- private Policy mCurrentPolicy = null;
- /// <summary>
- /// 战斗准备策略
- /// </summary>
- private Policy mReadyPolicy = null;
- /// <summary>
- /// 战斗停止策略
- /// </summary>
- private Policy mStopPolicy = null;
- /// <summary>
- /// 战斗入场策略
- /// </summary>
- private Policy mArrivalPolicy = null;
- /// <summary>
- /// 战斗离场策略
- /// </summary>
- private Policy mLeavePolicy = null;
- /// <summary>
- /// 战斗策略
- /// </summary>
- private Policy mFightingPolicy = null;
- /// <summary>
- /// 战前策略
- /// </summary>
- private Policy mPrewarPolicy = null;
- /// <summary>
- /// 战斗胜利策略
- /// </summary>
- private Policy mVictoryPolicy = null;
- /// <summary>
- /// 战斗失败策略
- /// </summary>
- private Policy mFailedPolicy = null;
- /// <summary>
- /// 超时策略
- /// </summary>
- private Policy mTimeoutPolicy = null;
- #endregion
- #region 分支策略 定义:可受主策略单向操纵, 不受游戏暂停影响
- /// <summary>
- /// 当前分支策略
- /// </summary>
- private Policy mSubPolicy = null;
- /// <summary>
- /// 战斗开始动画策略
- /// </summary>
- private Policy mWarningPolicy = null;
- /// <summary>
- /// 战斗开始动画策略
- /// </summary>
- private Policy mCriticalPolicy = null;
- /// <summary>
- /// 波次出现,Boss出场动画策略
- /// </summary>
- private Policy mBossPolicy = null;
- /// <summary>
- /// 释放技能
- /// </summary>
- private Policy mSkillPolicy = null;
- /// <summary>
- /// 释放技能
- /// </summary>
- private Policy mBossSkillPolicy = null;
- #endregion
- /// <summary>
- /// 初始化
- /// </summary>
- /// <param name="param">上下文环境信息</param>
- public void Initialize(BattleParam param)
- {
- this.isBattleFinish = false;
- this.mBattleParam = param;
- this.mCurrentPolicy = null;
- this.mSubPolicy = null;
- // 初始化策略
- this.mReadyPolicy = new PolicyReady(this.mBattleParam);
- this.mStopPolicy = new PolicyStop(this.mBattleParam);
- this.mArrivalPolicy = new PolicyArrival(this.mBattleParam);
- this.mLeavePolicy = new PolicyLeave(this.mBattleParam);
- this.mFightingPolicy = new PolicyFighting(this.mBattleParam);
- this.mVictoryPolicy = new PolicyVictory(this.mBattleParam);
- this.mFailedPolicy = new PolicyFailed(this.mBattleParam);
- this.mTimeoutPolicy = new PolicyTimeout(this.mBattleParam);
- this.mPrewarPolicy = new PolicyPrewar(this.mBattleParam);
- this.mWarningPolicy = new PolicyWarning(this.mBattleParam);
- this.mCriticalPolicy = new PolicyCritical(this.mBattleParam);
- this.mBossPolicy = new PolicyBoss(this.mBattleParam);
- this.mSkillPolicy = new PolicySkillTip(this.mBattleParam);
- this.mBossSkillPolicy = new PolicyBossSkill(this.mBattleParam);
- this.ChangeFieldPolicy(EBattleStaus.EBATTLE_STATUS_READY, null);
- }
- /// <summary>
- /// 周期调度
- /// </summary>
- /// <returns>战场策略当前调度状态</returns>
- public EBattleUpdateStatus OnUpdate(long longNow)
- {
- if (null == this.mCurrentPolicy)
- {
- return EBattleUpdateStatus.Complete;
- }
- // 分支策略调度
- if (null != this.mSubPolicy)
- {
- this.mSubPolicy.OnUpdate(longNow);
- if (this.mSubPolicy.IsComplete())
- {
- this.ChangeFieldSubPolicy(EBattleStaus.EBATTLE_STATUS_NONE, null);
- }
- }
- // 策略调度
- this.mCurrentPolicy.OnUpdate(longNow);
- return EBattleUpdateStatus.Continue;
- }
- #region 策略驱动
- /// <summary>
- /// 更改战场子策略
- /// </summary>
- /// <param name="substatus">状态标识</param>
- /// <param name="param">传递参数</param>
- public void ChangeFieldSubPolicy(EBattleStaus substatus, object param)
- {
- if (null != this.mSubPolicy && substatus != this.mSubPolicy.Type())
- {
- this.mSubPolicy.OnLeave();
- }
- switch (substatus)
- {
- case EBattleStaus.EBATTLE_STATUS_WARNING:
- this.mSubPolicy = this.mWarningPolicy;
- break;
- case EBattleStaus.EBATTLE_STATUS_CRITICAL:
- this.mSubPolicy = this.mCriticalPolicy;
- break;
- case EBattleStaus.EBATTLE_STATUS_BOSS:
- this.mSubPolicy = this.mBossPolicy;
- break;
- case EBattleStaus.EBATTLE_STATUS_SKILL:
- this.mSubPolicy = this.mSkillPolicy;
- break;
- case EBattleStaus.EBATTLE_STATUS_BOSSSKILL:
- this.mSubPolicy = this.mBossSkillPolicy;
- break;
- default:
- this.mSubPolicy = null;
- break;
- }
- if (null != this.mSubPolicy)
- {
- this.mSubPolicy.OnEnter(param);
- }
- }
- /// <summary>
- /// 更改当前战场策略
- /// </summary>
- /// <param name="status">状态标识</param>
- /// <param name="param">传递参数</param>
- public void ChangeFieldPolicy(EBattleStaus status, object param)
- {
- if (null != this.mCurrentPolicy && status != this.mCurrentPolicy.Type())
- {
- this.mCurrentPolicy.OnLeave();
- }
- switch (status)
- {
- case EBattleStaus.EBATTLE_STATUS_STOP:
- this.mCurrentPolicy = this.mStopPolicy;
- break;
- case EBattleStaus.EBATTLE_STATUS_READY:
- this.mCurrentPolicy = this.mReadyPolicy;
- break;
- case EBattleStaus.EBATTLE_STATUS_LEAVE:
- this.mCurrentPolicy = this.mLeavePolicy;
- break;
- case EBattleStaus.EBATTLE_STATUS_PREWAR:
- this.mCurrentPolicy = this.mPrewarPolicy;
- break;
- case EBattleStaus.EBATTLE_STATUS_FIGHTING:
- this.mCurrentPolicy = this.mFightingPolicy;
- break;
- case EBattleStaus.EBATTLE_STATUS_ARRIVAL:
- this.mCurrentPolicy = this.mArrivalPolicy;
- break;
- case EBattleStaus.EBATTLE_STATUS_VICTORY:
- this.mCurrentPolicy = this.mVictoryPolicy;
- break;
- case EBattleStaus.EBATTLE_STATUS_FAILED:
- this.mCurrentPolicy = this.mFailedPolicy;
- break;
- case EBattleStaus.EBATTLE_STATUS_TIMEOUT:
- this.mCurrentPolicy = this.mTimeoutPolicy;
- break;
- default:
- this.mCurrentPolicy = null;
- break;
- }
- if (null != this.mCurrentPolicy)
- {
- this.mCurrentPolicy.OnEnter(param);
- }
- }
- /// <summary>
- /// 获取当前战场策略
- /// </summary>
- /// <returns>当前策略类型</returns>
- public Policy CurrentPoilcy()
- {
- return this.mCurrentPolicy;
- }
- /// <summary>
- /// 获取当前子策略
- /// </summary>
- /// <returns>当前子策略</returns>
- public Policy CurrentSubPolicy()
- {
- return this.mSubPolicy;
- }
- #endregion
- }
- }
|