Example #1
0
        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}");
        }
Example #3
0
 public HolderBuilder AllowTransition(IAwaitableState <TStateType> newState, Func <TContext, bool> predicate)
 {
     _transitions.Add(new StateTransitionsHolder <TStateType, TContext> .StateTransition(predicate, newState));
     return(this);
 }
Example #4
0
 public HolderBuilder(StateTransitionManager <TStateType, TContext> stateTransitionManager, IAwaitableState <TStateType> state)
 {
     _stateTransitionManager = stateTransitionManager;
     _state = state;
 }
Example #5
0
 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;
 }