コード例 #1
0
 protected void ChangeState(StateToken stateToken, object data)
 {
     if (stateToken != Token)
     {
         Machine?.PerformTransitionTo(stateToken, data);
     }
 }
コード例 #2
0
        protected StateBase(StateToken token)
        {
            if (token == null)
            {
                throw new ArgumentNullException("StateBase::StateBase->token is null");
            }

            Token = token;
        }
コード例 #3
0
ファイル: StateMachine.cs プロジェクト: mengtest/RewriteFrame
        public void PerformTransitionTo(StateToken stateToken, object data)
        {
            if (stateToken == null)
            {
                if (IsRunning)
                {
                    CurrentState.OnExit(new StateExitEventArgs(null, data));
                    CurrentState = null;
                }
                OnComplete();
            }
            else
            {
                if (stateDic.TryGetValue(stateToken, out StateBase state))
                {
                    if (!IsRunning)
                    {
                        CurrentState = state;
                        CurrentState.OnEnter(new StateEnterEventArgs(null, data));
                    }
                    else
                    {
                        if (CurrentStateToken != stateToken)
                        {
                            StateBase oldState = CurrentState;

                            CurrentState.OnExit(new StateExitEventArgs(stateToken, data));
                            CurrentState = state;
                            CurrentState.OnEnter(new StateEnterEventArgs(oldState.Token, data));

                            OnStateChanged(new StateChangedEventArgs(oldState, state));
                        }
                    }
                }
                else
                {
                    throw new InvalidOperationException($"StateMachine::PerformTransitionTo->state is not found.toke  = {stateToken}");
                }
            }
        }
コード例 #4
0
 protected void ChangeState(StateToken stateToken)
 {
     ChangeState(stateToken, null);
 }
コード例 #5
0
ファイル: StateMachine.cs プロジェクト: mengtest/RewriteFrame
 public void SetInitialState(StateToken initialState, object data)
 {
     PerformTransitionTo(initialState, data);
 }
コード例 #6
0
ファイル: StateMachine.cs プロジェクト: mengtest/RewriteFrame
 public void SetInitialState(StateToken initialState)
 {
     SetInitialState(initialState, null);
 }