using UnityEngine; using System.Collections; using System; namespace YLBattle { public class LogicFighterFSM { /// /// 上下文环境 /// private BattleParam mGlobalParam = null; /// /// 隶属战斗对象 /// private LogicFighter mOwner = null; /// /// 全局状态 /// private BaseState mMainState = null; /// /// 当前状态 /// private BaseState mCurrentState = null; /// /// 上一个状态 /// private BaseState mPreviousState = null; #region(行为状态) /// /// 空闲状态 /// private StateIdle mStateIdle = null; /// /// 死亡状态 /// private StateDead mStateDead = null; /// /// 受击状态 /// private StateHit mStateOnHit = null; /// /// 施法状态 /// private StateAttack mStateAttack = null; /// /// 等待状态 /// private StateHidden mStateHidden = null; /// /// 消失状态 /// private StateDisapper mStateDisapper = null; /// /// 出场状态 /// private StateArrival mStateArrival = null; /// /// 旋转状态 /// private StateRoatate mStateRoatate = null; /// /// 等待状态 /// private StateWait mStateWait = null; /// /// 打断当前状态 /// public void BreakCurrentState() { this.ChangeState(BaseState.EFighterState.IDLE, false); } /// /// 获取上一次状态 /// /// 状态对象 public BaseState GetPreviousState() { return this.mPreviousState; } #endregion /// /// 初始化 /// /// 环境配置信息 /// 战斗对象 public void Initialize(BattleParam param, LogicFighter fighter) { this.mMainState = null; this.mGlobalParam = param; this.mOwner = fighter; this.mStateIdle = new StateIdle(this.mOwner, this.mGlobalParam); this.mStateOnHit = new StateHit(this.mOwner, this.mGlobalParam); this.mStateDead = new StateDead(this.mOwner, this.mGlobalParam); this.mStateAttack = new StateAttack(this.mOwner, this.mGlobalParam); this.mStateHidden = new StateHidden(this.mOwner, this.mGlobalParam); this.mStateDisapper = new StateDisapper(this.mOwner, this.mGlobalParam); this.mStateArrival = new StateArrival(this.mOwner, this.mGlobalParam); this.mStateRoatate = new StateRoatate(this.mOwner, this.mGlobalParam); this.mStateWait = new StateWait(this.mOwner, this.mGlobalParam); this.SetCurrentState(this.mStateHidden, null); } /// /// 设置当前状态 /// /// 状态 /// 参数 public void SetCurrentState(BaseState current, object param) { this.mCurrentState = current; this.mCurrentState.OnEnter(param); } /// /// 获取当前行为状态 /// /// 状态对象 public BaseState GetCurrentState() { return this.mCurrentState; } /// /// 状态周期调度 /// /// 当前逻辑时间 public void OnUpdateState(long now) { if (null != this.mCurrentState) { this.mCurrentState.OnUpdate(); } } /// /// 切换到指定状态 /// /// 新的状态 /// 状态初始化参数 public void ChangeState(BaseState.EFighterState newState, object param) { BaseState st = null; switch (newState) { case BaseState.EFighterState.IDLE: st = this.mStateIdle; break; case BaseState.EFighterState.Attack: st = this.mStateAttack; break; case BaseState.EFighterState.ONHIT: st = this.mStateOnHit; break; case BaseState.EFighterState.DEAD: st = this.mStateDead; break; case BaseState.EFighterState.HIDDEN: st = this.mStateHidden; break; case BaseState.EFighterState.DISAPPER: st = this.mStateDisapper; break; case BaseState.EFighterState.ARRIVAL: st = this.mStateArrival; break; case BaseState.EFighterState.ROTATE: st = this.mStateRoatate; break; case BaseState.EFighterState.WAIT: st = this.mStateWait; break; default: st = null; break; } if (null == st) { return; } this.mCurrentState.OnLeave(); this.mPreviousState = this.mCurrentState; this.mCurrentState = st; this.mCurrentState.OnEnter(param); } } }