/// <summary>
 ///     A human-readable representation of the state machine.
 /// </summary>
 /// <returns>A description of the current state and permitted triggers.</returns>
 public override string ToString()
 {
     return(string.Format(
                "StateMachine {{ State = {0}, PermittedTriggers = {{ {1} }}}}",
                State,
                string.Join(", ", PermittedTriggers.Select(t => t.ToString()).ToArray())));
 }
Esempio n. 2
0
        public void Fire(TTrigger trigger)
        {
            if (!PermittedTriggers.Contains(trigger))
            {
                throw new NotSupportedException("'" + trigger + "' trigger is not configured for '" + CurrentState + "' state.");
            }

            TState oldState = CurrentState;
            TState newState = currentStateConfigs.GetTransitionState(trigger);
            IState <TState, TTrigger> oldStateRepresentation = GetStateConfigs(oldState);
            IState <TState, TTrigger> newStateRepresentation = GetStateConfigs(newState);

            if (e_OnUpdate != null)
            {
                e_OnUpdate();
            }

            IStateTransitions <TState, TTrigger> transition = new StateTransitions <TState, TTrigger>(oldState, newState, trigger);

            oldStateRepresentation.OnExit(transition);
            newStateRepresentation.OnEnter(transition);
            CurrentState = newState;
        }