using UnityEngine; using System.Collections; namespace MyFrameworkPure { //状态机实现 public class StateMachine where T : class { /// /// 游戏智能体 /// private T mAI; /// /// 全局状态(可以在任意时间切换至全局状态) /// private State mGlobalState; /// /// 当前状态 /// private State mCurrentState; /// /// 上一个状态 /// private State mPreviousState; public StateMachine(T ai) { mAI = ai; } /// /// 更新状态机 /// public void UpdateState() { if (mGlobalState != null) { mGlobalState.Execute(mAI); } if (mCurrentState != null) { mCurrentState.Execute(mAI); } } /// /// 改变状态 /// /// 新状态 public void ChangeState(State newState) { Debug.Assert(newState != null, "the new state to chanaged is null *** " + newState); mPreviousState = mCurrentState; mCurrentState.Exit(mAI); mCurrentState = newState; mCurrentState.Enter(mAI); } /// /// 反转状态至上一个状态 /// public void RevertToPreviousState() { Debug.Assert(mPreviousState != null, "the previous to revert is null *** " + mPreviousState); ChangeState(mPreviousState); } public State GlobalState { get { return mGlobalState; } set { mGlobalState = value; } } public State CurrentState { get { return mCurrentState; } set { mCurrentState = value; } } public State PreviousState { get { return mPreviousState; } set { mPreviousState = value; } } } }