public void AddTransition <TTrigger>(T fromState, T toState, Trigger <TTrigger> trigger, Func <TTrigger, bool> condition, Action <TTrigger> transitionAction) where TTrigger : class { var stateObject = GetState(fromState); var transition = new TriggeredTransition <T, TTrigger>(fromState, toState, trigger, transitionAction, condition); stateObject.AddTriggeredTransition(transition); }
public void AddTriggeredTransition <TTrigger>(TriggeredTransition <T, TTrigger> transition) where TTrigger : class { _transitions.Add(transition.Trigger.Sequence); transition.Trigger.Sequence.Subscribe(args => { if (transition.Condition != null) { try { bool success = false; if (_stateMachine.CurrentDispatcher != null) { success = (bool)_stateMachine.CurrentDispatcher.Invoke(transition.Condition, args); } else { success = transition.Condition(args); } if (!success) { return; } } catch (Exception e) { _stateMachine.RaiseStateMachineException(e); return; } } Action action = () => _stateMachine.TransitionStateInternal(transition.FromState, transition.ToState, args, transition.TransitionAction); _stateMachine.EnqueueTransition(action); }); }