/// <summary> /// 如果要判断为同一状态,不进行切换,调用,true 判断,false 不判断 /// </summary> /// <param name="nextState"></param> /// <param name="ignor">是否判断为同一状态</param> /// <returns></returns> public virtual bool ChangeState(MState <T> nextState, bool isSame) { if (LockCurrentState) { return(false); } if (nextState == null) { Debug.Log("State Machine ===> nextState is null State"); return(false); } //if (CurrenState == null) //{ } if (isSame && nextState.Name == CurrenState.Name) { //Debug.Log(CurrenState.Name + " <<=======>> " + nextState.Name); return(false); } previousState = (CurrenState == null) ? nextState : CurrenState; CurrenState.Exit(); //Debug.Log("_currenState = " + _currenState.Name); //Debug.Log("nextState = " + _currenState.Name); CurrenState = nextState; CurrenState.Enter(); return(true); }
/// <summary> /// 初始化状态机,供外部创建状态机时调用 /// </summary> /// <param name="gameObject"></param> public virtual void CreateSM(T controller) { MState <T> startState = new nullMState <T>(); CurrenState = startState; previousState = startState; this.controller = controller; initial(Controller); }
public void SetGolbalState(MState <T> state) { if (golbalState != null) { golbalState.Exit(); } golbalState = state; if (golbalState != null) { golbalState.Enter(); } }
//增加,减少状态 protected bool addState(MState <T> state) { if (map.ContainsKey(state.Name)) { //Debug.Log(state.Name + "is already exist"); return(false); } map.Add(state.Name, state); return(true); }
public bool AddState(MState <T> state, T controller) { if (this.controller == null) { Debug.Log("未初始化controller"); return(false); } if (map.ContainsKey(state.Name)) { //Debug.Log(state.Name + "is already exist"); return(false); } if (state.StateMachine == null) { state.CreateState(controller, this); } map.Add(state.Name, state); return(true); }
public virtual bool ChangeState(MState <T> nextState) { return(ChangeState(nextState, false)); }
protected bool delete(MState <T> state) { return(this.Delete(state.Name)); }
public bool isInState(MState <T> State) { //Debug.Log(State.Name + "<===> " + _currenState.Name); return(State.Name.Equals(CurrenState.Name) ? true : false); }