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