/// <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; }
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); }