private void AddOtherStateAutoTransition(TState otherState , TTrigger trigger , StateTransitionBase <T, TState, TTrigger> transition) { var otherStateConfig = GetTargetStateConfiguration(otherState); otherStateConfig.AddAutoTransition(trigger, transition); }
/// <summary> /// Adds an automatic (forward or back) transition to the state configuration. /// </summary> /// <param name="trigger">The <see cref="TTrigger"/> to initiate this transition.</param> /// <param name="transition">The transition to add.</param> public void AddAutoTransition(TTrigger trigger, StateTransitionBase <T, TState, TTrigger> transition) { if (!AutoTransitions.TryGetValue(trigger, out var triggerTransitions)) { triggerTransitions = new List <StateTransitionBase <T, TState, TTrigger> >(); AutoTransitions.Add(trigger, triggerTransitions); } if (triggerTransitions.Any(t => t.Priority == transition.Priority)) { throw new InvalidOperationException($"Auto transition for {State} state with priority {transition.Priority} already added."); } triggerTransitions.Add(transition); }
/// <summary> /// Adds an allowable transition to the state configuration. /// </summary> /// <param name="trigger">Trigger to initiate the transition.</param> /// <param name="transition">The transition to add.</param> public void AddTransition(TTrigger trigger, StateTransitionBase <T, TState, TTrigger> transition) { if (!Transitions.TryGetValue(trigger, out var existingTransitions)) { Transitions.Add(trigger, new List <StateTransitionBase <T, TState, TTrigger> > { transition }); } else { //??? State machine doesn't enforce this //if (existingTransitions.Any(t => t.Priority == transition.Priority)) //{ throw new InvalidOperationException($"{trigger} trigger was previously added for {State} state as priority {transition.Priority}."); } existingTransitions.Add(transition); } }