Beispiel #1
0
        private PlainStateMachine <TState, TTrigger> Build <TState, TTrigger>()
        {
            var stateMachine = new PlainStateMachine <TState, TTrigger>();

            AddStates(stateMachine);
            AddTransitionsAndGuardConditions(stateMachine);

            return(stateMachine);
        }
Beispiel #2
0
        private void AddStates <TState, TTrigger>(PlainStateMachine <TState, TTrigger> stateMachine)
        {
            if (_states.Count > 0)
            {
                for (int i = 0; i < _states.Count; i++)
                {
                    var current = _states[i];

                    TState stateId     = (TState)current.StateId;
                    IState stateObject = (current.StateObject as IState) ?? new EmptyState();

                    stateMachine.AddState(stateId, stateObject);

                    if (stateObject is IStateEventHandler eventHandler)
                    {
                        stateMachine.SubscribeEventHandlerTo(stateId, eventHandler);
                    }
                }

                stateMachine.InitialState = (TState)InitialStateId;
            }
        }
Beispiel #3
0
        private void AddTransitionsAndGuardConditions <TState, TTrigger>(PlainStateMachine <TState, TTrigger> stateMachine)
        {
            if (_transitions.Count > 0)
            {
                for (int i = 0; i < _transitions.Count; i++)
                {
                    var current = _transitions[i];

                    TState   stateFrom = (TState)current.StateFrom;
                    TState   stateTo   = (TState)current.StateTo;
                    TTrigger trigger   = (TTrigger)current.Trigger;

                    var transition = new Transition <TState, TTrigger>(stateFrom, trigger, stateTo);

                    stateMachine.AddTransition(transition);

                    for (int j = 0; j < current.GuardConditions.Length; j++)
                    {
                        stateMachine.AddGuardConditionTo(transition, ScriptableObject.Instantiate(current.GuardConditions[j]));
                    }
                }
            }
        }