Example #1
0
 /// <summary>将状态机更改至上一个状态</summary>
 public virtual void ChangeToPreviousState(IStateParam param = null)
 {
     if (mFSM != null)
     {
         mFSM.ChangeToPreviousState(param);
     }
 }
Example #2
0
        /// <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;
        }
Example #3
0
 /// <summary>将状态机更改至默认状态</summary>
 public virtual void ChangeToDefaultState(IStateParam param = null)
 {
     if (mFSM != null)
     {
         mFSM.ChangeToDefaultState(param);
     }
 }
Example #4
0
 /// <summary>将状态机更改至任意状态</summary>
 public virtual void ChangeToState(int name, IStateParam param = null)
 {
     if (mFSM != null)
     {
         mFSM.ChangeState(name, param);
     }
 }
Example #5
0
        /// <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;
        }
Example #6
0
        /// <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);
                }
            }
        }
Example #7
0
        /// <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);
            }
        }
Example #8
0
        /// <summary>更改至默认状态</summary>
        public virtual void ChangeToDefaultState(IStateParam param = null)
        {
            IState defaultState = mStates.GetValue(DefaultState);

            if (defaultState != null)
            {
                SetCurrentState(ref defaultState, param);
            }
        }
Example #9
0
        /// <summary>更改至默认子状态</summary>
        public void ChangeSubStateToDefault(IStateParam param = null)
        {
            if (!mSubStateList.IsContainsKey(DefaultState))
            {
                return;
            }

            ChangeSubState(DefaultState, param);
        }
Example #10
0
        /// <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);
            }
        }
Example #11
0
 public override void ChangeToPreviousState(IStateParam param = default)
 {
     if (Previous != default)
     {
         if (Previous is IAutomateState state)
         {
             ChangeAutomateState(state);
         }
         else
         {
         }
     }
     else
     {
     }
 }
Example #12
0
        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());
            }
        }
Example #13
0
        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;
        }
Example #14
0
        /// <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;
        }
Example #15
0
 /// <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);
 }
Example #16
0
        /// <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;
                }
Example #17
0
        /// <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;
                }
            }
Example #18
0
        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);
        }
Example #19
0
 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);
 }
Example #20
0
 /// <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);
 }
Example #21
0
        /// <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;
        }
Example #22
0
 public bool TryDequeueTrigger(out IStateParam param)
 {
     return(this.SmTriggerQueue.TryDequeue(out param));
 }
Example #23
0
 public void CheckStateAniDuringSetStateParam(ref IStateParam param)
 {
     CheckFSMNotEmpty();
     CheckStateAnimation(mFSM.AniParamer);
 }
Example #24
0
        /// <summary>更改至指定状态</summary>
        public virtual void ChangeState(int name, IStateParam param = null)
        {
            IState state = mStates.IsContainsKey(name) ? mStates[name] : null;

            SetCurrentState(ref state, param);
        }
Example #25
0
 public virtual void SetStateParam(IStateParam param)
 {
     mSelfParam = param;
 }
Example #26
0
        public virtual void ChangeStateByIndex(int index, IStateParam param = null)
        {
            IState state = GetState(index);

            SetCurrentState(ref state, param);
        }
Example #27
0
 public override bool RunTrigger(IStateParam param, StateMachine sm)
 {
     runAct.Invoke(sm, null);
     return(true);
 }
Example #28
0
        public override void SetStateParam(IStateParam param)
        {
            base.SetStateParam(param);

            CheckStateAniDuringSetStateParam(ref param);
        }
Example #29
0
 /// <summary>初始化状态</summary>
 public virtual void InitState(IStateParam param = default)
 {
     mIsStateActived = true;
     mSelfParam      = param;
 }
Example #30
0
 /// <summary>初始化状态</summary>
 public virtual void InitState(IStateParam param = null)
 {
     mIsStateActived = true;
 }