/// <summary>将状态机更改至上一个状态</summary> public virtual void ChangeToPreviousState(IStateParam param = null) { if (mFSM != null) { mFSM.ChangeToPreviousState(param); } }
/// <summary>销毁</summary> public virtual void Dispose() { StopStateMachine(); if (mStateList != null) { int max = mStateList.Count; for (var i = 0; i < max; i++) { Utils.Reclaim(mStateList[i]); } } Utils.Reclaim(ref mStates, true); Utils.Reclaim(ref mStateList, true); mNext = default; Current = default; mPrevious = default; mStateParam = default; mChangingState = default; FSMFrameUpdater = default; FSMRegister = default; OnFSMChanged = default; }
/// <summary>将状态机更改至默认状态</summary> public virtual void ChangeToDefaultState(IStateParam param = null) { if (mFSM != null) { mFSM.ChangeToDefaultState(param); } }
/// <summary>将状态机更改至任意状态</summary> public virtual void ChangeToState(int name, IStateParam param = null) { if (mFSM != null) { mFSM.ChangeState(name, param); } }
/// <summary>销毁</summary> public virtual void Dispose() { mIsStateActived = false; IState state = default; int max = mSubStateList.Size; var list = mSubStateList.Keys; for (int i = 0; i < max; i++) { state = mSubStateList.GetValue(list[i]); #if ILRUNTIME state?.Dispose(); #else Utils.Reclaim(state); #endif } #if ILRUNTIME mSubStateList?.Clear(); mSubStateList = default; #else Utils.Reclaim(mSubStateList); #endif mIsInited = false; mSubState = default; mSubStateList = default; mFSM = default; mFSMName = int.MaxValue; mChangingState = default; mChangingStateParam = default; mSelfParam = default; }
/// <summary>设置当前状态</summary> private void SetCurrentState(ref IState state, IStateParam param = null) { if (state == default) { ChangeToDefaultState(param); return; } if (mChangingState != state) { IsStateChanging = true; mStateParam = param; mChangingState = state; if (IsApplyFastChange) { ChangedStateFinish(); } } else { if (Current != null) { Current.SetStateParam(param); } } }
/// <summary>更改至任意子状态,只有最后一次调用生效</summary> public virtual void ChangeSubState(int name, IStateParam param = null) { if (mSubStateList == null) { return; } if ((mSubState != null) && (name == mSubState.StateName)) { if (param != null) { mSubState.SetStateParam(param); } else { return; } } if (mSubStateList.IsContainsKey(name)) { mIsStateChanged = true; mChangingState = mSubStateList.GetValue(name); mChangingStateParam = param; } else { ChangeSubStateToDefault(param); } }
/// <summary>更改至默认状态</summary> public virtual void ChangeToDefaultState(IStateParam param = null) { IState defaultState = mStates.GetValue(DefaultState); if (defaultState != null) { SetCurrentState(ref defaultState, param); } }
/// <summary>更改至默认子状态</summary> public void ChangeSubStateToDefault(IStateParam param = null) { if (!mSubStateList.IsContainsKey(DefaultState)) { return; } ChangeSubState(DefaultState, param); }
/// <summary>运行状态机</summary> public virtual void Run(IStateParam param = null, int initState = int.MaxValue) { IsRun = true; FSMFrameUpdater?.Invoke(this, true); if (initState != int.MaxValue) { ChangeState(initState, param); } else if (DefaultState != int.MaxValue) { ChangeToDefaultState(param); } }
public override void ChangeToPreviousState(IStateParam param = default) { if (Previous != default) { if (Previous is IAutomateState state) { ChangeAutomateState(state); } else { } } else { } }
public virtual void OnUpdate(int dTime) { if (mIsStateChanged) { if (mSubState != null) { mSubState.DeinitState(); } mSubState = mChangingState; mSubState.InitState(mChangingStateParam); mChangingStateParam = null; mIsStateChanged = false; Tester.Instance.Log(TesterBaseApp.Instance, TesterBaseApp.LOG0, mSubState != null, GetType().Name, " => ", mSubState.StateName.ToString()); } }
private void AfterStateChanged() { if ((Current.SubStateCount > 0) && (SubStateWillChange != int.MaxValue)) { Current.ChangeSubState(SubStateWillChange, SubStateParam); } if (OnFSMChanged != null) { OnFSMChanged.Invoke(this, CurrentStateName); } mNext = null; mStateParam = null; SubStateParam = null; SubStateWillChange = int.MaxValue; }
/// <summary>销毁</summary> public virtual void Dispose() { StopStateMachine(); if (mStateList != null) { int max = mStateList.Count; #if ILRUNTIME FState state; #endif for (var i = 0; i < max; i++) { #if ILRUNTIME state = mStateList[i] as FState; state.Dispose(); #else Utils.Reclaim(mStateList[i]); #endif } } else { } #if ILRUNTIME mStates?.Clear(); mStateList?.Clear(); mStates = default; mStateList = default; #else Utils.Reclaim(ref mStates, true); Utils.Reclaim(ref mStateList, true); #endif mNext = default; Current = default; mPrevious = default; mStateParam = default; mChangingState = default; FSMFrameUpdater = default; FSMRegister = default; OnFSMChanged = default; }
/// <summary>更改至上一个状态</summary> public void ChangeToPreviousState(IStateParam param = null) { if (mPrevious == null) { if ((Current != null) && (Current.PreviousState == int.MaxValue)) { mPrevious = mStates.GetValue(Current.PreviousState); } else { mPrevious = (mStateIndex - 1 >= 0) ? mStateList[mStateIndex - 1] : null; } } if (mPrevious == null) { return; } SetCurrentState(ref mPrevious, param); }
/// <summary>更改至下一个状态</summary> public virtual void ChangeToNextState(IStateParam param = null) { if (Current == default) { return; } else { if (Current.NextState != int.MaxValue) { mNext = mStates.GetValue(Current.NextState); } else { } if ((mNext == default) && Current.IsApplyAutoNext) { int n = mStateIndex + 1; mNext = (n <= (mStateList.Count - 1)) ? mStateList[n] : default; }
/// <summary>更改至任意子状态,只有最后一次调用生效</summary> public virtual void ChangeSubState(int name, IStateParam param = default) { if (mSubStateList == default) { return; } else { } if ((mSubState != default) && (name == mSubState.StateName)) { if (param != default) { mSubState.SetStateParam(param); } else { return; } }
public virtual bool RunTrigger(IStateParam param, StateMachine sm) { //if (!sm.CheckState(FromState)) //{ // throw new NotCurrentStateException(sm.GetType().ToString() + " : current is " + sm.CurrentState.StateName + ",not Transition from: " + FromState.StateName); //} StateExitEventArgs seea = new StateExitEventArgs(); try { FromState.DoExit(seea); } catch (Exception ex) { throw ex; } try { runAct.Invoke(sm, null); } catch (Exception ex) { throw ex; } StateEntryEventArgs senea = new StateEntryEventArgs(sm); try { ToState.ExecDoEntry(senea); } catch (Exception ex) { throw ex; } return(true); }
public override bool RunTrigger(IStateParam param, StateMachine sm) { try { StateExitEventArgs seea = new StateExitEventArgs(); FromState.DoExit(seea); } catch { throw new StateMachineFatelException(FromState.StateName + ": get exit fail event"); } runAct.Invoke(sm, null); try { StateEntryEventArgs seea = new StateEntryEventArgs(sm); ToState.ExecDoEntry(seea); } catch { throw new StateMachineFatelException(ToState.StateName + ": get entry fail event"); } return(true); }
/// <summary>更改至下一个状态</summary> public void ChangeToNextState(IStateParam param = null) { if (Current != null) { if (Current.NextState == int.MaxValue) { mNext = mStates.GetValue(Current.NextState); } if ((mNext == null) && Current.IsApplyAutoNext) { int n = mStateIndex + 1; mNext = (n <= (mStateList.Count - 1)) ? mStateList[n] : null; } if (mNext == null) { return; } } else { return; } SetCurrentState(ref mNext, param); }
/// <summary>销毁</summary> public virtual void Dispose() { mIsStateActived = false; IState state = default; int max = mSubStateList.Size; var list = mSubStateList.Keys; for (int i = 0; i < max; i++) { state = mSubStateList.GetValue(list[i]); Utils.Reclaim(state); } Utils.Reclaim(mSubStateList); mIsInited = false; mSubState = null; mSubStateList = null; mFSM = null; mFSMName = int.MaxValue; mChangingState = null; mChangingStateParam = null; mSelfParam = null; }
public bool TryDequeueTrigger(out IStateParam param) { return(this.SmTriggerQueue.TryDequeue(out param)); }
public void CheckStateAniDuringSetStateParam(ref IStateParam param) { CheckFSMNotEmpty(); CheckStateAnimation(mFSM.AniParamer); }
/// <summary>更改至指定状态</summary> public virtual void ChangeState(int name, IStateParam param = null) { IState state = mStates.IsContainsKey(name) ? mStates[name] : null; SetCurrentState(ref state, param); }
public virtual void SetStateParam(IStateParam param) { mSelfParam = param; }
public virtual void ChangeStateByIndex(int index, IStateParam param = null) { IState state = GetState(index); SetCurrentState(ref state, param); }
public override bool RunTrigger(IStateParam param, StateMachine sm) { runAct.Invoke(sm, null); return(true); }
public override void SetStateParam(IStateParam param) { base.SetStateParam(param); CheckStateAniDuringSetStateParam(ref param); }
/// <summary>初始化状态</summary> public virtual void InitState(IStateParam param = default) { mIsStateActived = true; mSelfParam = param; }
/// <summary>初始化状态</summary> public virtual void InitState(IStateParam param = null) { mIsStateActived = true; }