예제 #1
0
        /// <summary>
        /// Enters the start state.
        /// </summary>
        public void Start()
        {
            if (startState == null)
            {
                throw new InvalidOperationException("No start state set!");
            }

            if (currentState != null)
            {
                throw new InvalidOperationException("FSM already in a state");
            }

            startState.FireEnterAction();
            currentState = startState;
        }
예제 #2
0
        internal State TriggerEvent(FSMEvent trigger)
        {
            if (!transitions.ContainsKey(trigger))
            {
                return(null);
            }

            foreach (Transition transition in transitions[trigger])
            {
                if (transition.CheckGuard())
                {
                    FireExitAction();
                    transition.FireAction();
                    State newState = transition.Target;
                    newState.FireEnterAction();
                    return(newState);
                }
            }
            return(null);
        }