private void OnGUI() { if (GUILayout.Button("ChangeState StateOne")) { m_IFSM.ChangeState <StateOne>(); } if (GUILayout.Button("ChangeState StateTwo")) { m_IFSM.ChangeState <StateTwo>(); } if (GUILayout.Button("Update Condition State")) { m_IFSM.GetCondition <ConditionTwo>().UpdateState <StateTwo>(); } }
/// <summary> ///状态检测事件; /// </summary> public virtual void Reason(IFSM <T> fsm) { for (int i = 0; i < triggerList.Count; i++) { if (triggerList[i].Handler(fsm)) { fsm.ChangeState(GetTriggeredState(triggerList[i]).GetType()); return; } } }
public void ChangeState <TState>(IFSM <T> fsm) where TState : IState <T> { IFSM <T> fsmImplement = (IFSM <T>)fsm; if (fsmImplement == null) { return; } fsmImplement.ChangeState <TState>(); }
private void Start() { // yield return new WaitForSeconds(2f); m_FSMManager = GameBox.GetComponent <FSMComponent>(); //获取状态机管家组件 m_IFSM = m_FSMManager.CreateFSM("Demo"); //创建一个状态机 m_IFSM.AddState <StateOne>(); m_IFSM.AddState(typeof(StateTwo)); m_IFSM.AddCondition <ConditionOne>(); m_IFSM.AddCondition <ConditionTwo>(); m_IFSM.ChangeState <StateOne>(); //初始状态 }
public void ChangeState(IFSM <T> fsm, Type stateType) { IFSM <T> fsmImplement = fsm; if (fsmImplement == null) { return; } if (stateType == null) { return; } if (!typeof(IState <T>).IsAssignableFrom(stateType)) { return; } fsmImplement.ChangeState(stateType); }
/// <summary> /// Triggers a state change in this instance /// </summary> /// <typeparam name="T">state to change to</typeparam> public void ChangeState <T>() where T : IState { _fsm.ChangeState <T>(); }
/// <summary> /// 改变流程 /// </summary> /// <typeparam name="T">流程的类型</typeparam> public void ChangeProcedure <T>() where T : BaseProcedure { m_ProcedureOwner.ChangeState <T>(); }
/// <summary> /// 切换当前过程状态。 /// </summary> /// <typeparam name="TProcedure">要切换到的有限状态机状态类型。</typeparam> public void ChangeProcedure <TProcedure>() where TProcedure : ProcedureBase { m_ProcedureFSM.ChangeState <TProcedure>(); }