protected void ChangeState(StateToken stateToken, object data) { if (stateToken != Token) { Machine?.PerformTransitionTo(stateToken, data); } }
protected StateBase(StateToken token) { if (token == null) { throw new ArgumentNullException("StateBase::StateBase->token is null"); } Token = token; }
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}"); } } }
protected void ChangeState(StateToken stateToken) { ChangeState(stateToken, null); }
public void SetInitialState(StateToken initialState, object data) { PerformTransitionTo(initialState, data); }
public void SetInitialState(StateToken initialState) { SetInitialState(initialState, null); }