/// <summary>状态切换</summary> public void ChangeActiveState(FSMTriggerID triggerId) { if (currentState == null) { return; } //根据条件编号,在当前状态查找输出状态 var stateId = currentState.GetOutPutState(triggerId); //可能得到的3个结果 //1.None : 不处理 if (stateId == FSMStateID.None) { return; } //退出当前状态 currentState.ExitState(this); //2.默认状态: 将原默认状态设为当前状态 if (stateId == FSMStateID.Default) { currentState = defaultState; } else //3.具体状态: 将具体状态设为当前状态 { currentState = allState.Find(p => p.stateId == stateId); } currentSateId = currentState.stateId; //进入新状态 currentState.EnterState(this); }
/// <summary> /// 切换状态 /// </summary> /// <param name="stateID"></param> public void ChangeActiveState(FSMStateID stateID) { //离开上一个状态 currentState.ExitState(this); //如果切换的状态是默认状态 currentState = stateID == FSMStateID.Default ? defaultState : states.Find(s => s.stateID == stateID); //进入下一个状态 currentState.EnterState(this); }
/// <summary> /// 切换状态 /// </summary> /// <param name="nextStateID"></param> public void ChangeState(FSMStateID nextStateID) { //计算需要切换的目标状态 //如果需要切换的是默认状态,则直接返回;否则在状态列表中查找。 var nextState = nextStateID == FSMStateID.Default ? defaultState : stateList.Find(s => s.StateID == nextStateID); currentState.ExitState(this); currentState = nextState; currentState.EnterState(this); }
/// <summary>切换状态</summary> public void ChangActiveState(FSMStateID nextStateId) { //查找状态对象 FSMState nextState = nextStateId == FSMStateID.Default ? defaultState : states.Find(p => p.stateid == nextStateId); //当前状态 --- 出 currentState.ExitState(this); //做出下步的安排 currentState = nextState; //下一个状态--- 进 currentState.EnterState(this); }
/// <summary> /// 切换状态 /// </summary> /// <param name="stateID">需要切换的状态编号</param> public void ChanageState(FSMStateID stateID) { //如果需要切换的状态是默认状态,则 //FSMState targetState = stateList.Find(s => s.StateID == stateID); //if (stateID == FSMStateID.Default) // targetState = defaultState; FSMState targetState = stateID == FSMStateID.Default? defaultState: stateList.Find(s => s.StateID == stateID); //切换状态 currentState.ExitState(this); currentState = targetState; currentState.EnterState(this); }
/// <summary> /// 切换状态 /// </summary> /// <param name="stateID">状态ID</param> public void ChangeActiveState(FSMStateID stateID) { currentState.ExitState(this); //离开上一个状态 if (stateID == FSMStateID.Default) { currentState = defaultState; } else { currentState = states.Find(s => s.StateID == stateID); } currentState.EnterState(this); }
//切换状态(状态类调用) public void ChangeState(FSMStateID stateID) { FSMState targetState; //如果需要切换的是默认状态 则 //FSMStateID.Default if (stateID == FSMStateID.Default) { targetState = defaultState; } else { targetState = states.Find(s => s.StateID == stateID); } //退出之前状态 currentState.ExitState(this); //切换状态 currentState = targetState; //进入当前状态 currentState.EnterState(this); }
/// <summary>切换状态</summary> public void ChangeActiveState(FSMTriggerID triggerId) { //1 现在是什么情况 --当前状态 当前条件 --> 下一个状态是谁 var nextStateId = currentState.GetOutputState(triggerId); if (nextStateId == FSMStateID.None) { return; } FSMState nextState = null; if (nextStateId != FSMStateID.Default) { nextState = states.Find(p => p.stateId == nextStateId); } else { // 默认状态 currentState = defaultState; } //2 当前状态 -- 出 currentState.ExitState(this); //3 做出下一步的安排 if (null != nextState) { currentState = nextState; } else { currentState = defaultState; } //4 下一个状态 -- 进 currentStateID = currentState.stateId; currentState.EnterState(this); }
//切换状态 public void ChangeActiveState(FSMStateID stateID) { currentState.ExitState(this); currentState = stateID == FSMStateID.Default ? defaultState : states.Find(s => s.StateID == stateID); currentState.EnterState(this); }