using UnityEngine; using System.Collections; using System.Collections.Generic; using System; namespace YLBattle { /// /// 战场中,主逻辑推进.... /// public partial class BattleField : IBattleInnerOper { /// /// 本次战斗详细上下文数据 /// private BattleParam mBattleParam = null; /// /// 战斗是否已经结束 /// private bool isBattleFinish = false; /// /// 获取当前战场上下文环境信息 /// /// 上下文环境信息 public BattleParam Env() { return this.mBattleParam; } #region 战场状态驱动 /// /// 当前执行策略 /// private Policy mCurrentPolicy = null; /// /// 战斗准备策略 /// private Policy mReadyPolicy = null; /// /// 战斗停止策略 /// private Policy mStopPolicy = null; /// /// 战斗入场策略 /// private Policy mArrivalPolicy = null; /// /// 战斗离场策略 /// private Policy mLeavePolicy = null; /// /// 战斗策略 /// private Policy mFightingPolicy = null; /// /// 战前策略 /// private Policy mPrewarPolicy = null; /// /// 战斗胜利策略 /// private Policy mVictoryPolicy = null; /// /// 战斗失败策略 /// private Policy mFailedPolicy = null; /// /// 超时策略 /// private Policy mTimeoutPolicy = null; #endregion #region 分支策略 定义:可受主策略单向操纵, 不受游戏暂停影响 /// /// 当前分支策略 /// private Policy mSubPolicy = null; /// /// 战斗开始动画策略 /// private Policy mWarningPolicy = null; /// /// 战斗开始动画策略 /// private Policy mCriticalPolicy = null; /// /// 波次出现,Boss出场动画策略 /// private Policy mBossPolicy = null; /// /// 释放技能 /// private Policy mSkillPolicy = null; /// /// 释放技能 /// private Policy mBossSkillPolicy = null; #endregion /// /// 初始化 /// /// 上下文环境信息 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); } /// /// 周期调度 /// /// 战场策略当前调度状态 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 策略驱动 /// /// 更改战场子策略 /// /// 状态标识 /// 传递参数 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); } } /// /// 更改当前战场策略 /// /// 状态标识 /// 传递参数 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); } } /// /// 获取当前战场策略 /// /// 当前策略类型 public Policy CurrentPoilcy() { return this.mCurrentPolicy; } /// /// 获取当前子策略 /// /// 当前子策略 public Policy CurrentSubPolicy() { return this.mSubPolicy; } #endregion } }