public IAwaitableState <TStateType> GetNextState(IAwaitableState <TStateType> currentState, TContext context) { var nextState = _transitionHolders[currentState.Type].Transitions .First(transition => transition.CanSelectPredicate(context)) .NextState; Debug.Log($"({GetType().Name}); current: {currentState.Type}; next: {nextState.Type}\nContext: {context}"); return(nextState); }
public async Task StartWithState(TStateType stateType) { _currentState = _transitionManager.GetStateByType(stateType); await _currentState.RunState(); do { _currentState = _transitionManager.GetNextState(_currentState, _context); await _currentState.RunState(); } while (!_currentState.IsExitState); Debug.Log($"Finish State machine {GetType().Name}"); }
public HolderBuilder AllowTransition(IAwaitableState <TStateType> newState, Func <TContext, bool> predicate) { _transitions.Add(new StateTransitionsHolder <TStateType, TContext> .StateTransition(predicate, newState)); return(this); }
public HolderBuilder(StateTransitionManager <TStateType, TContext> stateTransitionManager, IAwaitableState <TStateType> state) { _stateTransitionManager = stateTransitionManager; _state = state; }
protected HolderBuilder AddState(IAwaitableState <TStateType> state) { return(new HolderBuilder(this, state)); }
public StateTransition(Func <TContext, bool> canSelectPredicate, IAwaitableState <TStateType> nextState) { CanSelectPredicate = canSelectPredicate; NextState = nextState; }
public StateTransitionsHolder(IAwaitableState <TStateType> state, List <StateTransition> transitions) { State = state; Transitions = transitions; }