public HierarchicalStateMachine(IEqualityComparer <TState> stateComparer, IEqualityComparer <TTrigger> triggerComparer) { if (stateComparer == null) { throw new ArgumentNullException(nameof(stateComparer)); } if (triggerComparer == null) { throw new ArgumentNullException(nameof(triggerComparer)); } _stateComparer = new Comparer <TState>(); _triggerComparer = new Comparer <TTrigger>(); SetStateComparer(stateComparer); SetTriggerComparer(triggerComparer); _stateHierarchy = new StateHierarchy <TState>(_stateComparer); _stateHierarchyBehaviourScheduler = new StateHierarchyBehaviourScheduler <TState>(_stateHierarchy, _stateComparer); _transitionValidator = new TransitionValidator <TState, TTrigger>(_stateComparer, _triggerComparer, _stateHierarchyBehaviourScheduler); _transitionHandler = new TransitionHandler <TState, TTrigger>(_stateComparer, _triggerComparer, _stateHierarchyBehaviourScheduler, _transitionValidator); _hierarchicalEventDispatcher = new HierarchicalEventDispatcher <TState>(_stateComparer, _stateHierarchyBehaviourScheduler); SubscribeToEventsForInternalStateChanging(); SubscribeToHierarchyPathChangeEvents(); SubscribeToEventsForSavingValidTransition(); }
public StateHierarchyBehaviourScheduler(StateHierarchy <TState> stateHierarchy, IEqualityComparer <TState> stateComparer) { _stateHierarchy = stateHierarchy; _stateComparer = stateComparer; _activeHierarchyPath = new List <KeyValuePair <TState, IState> >(); OnTransitionFinished += CatchSwitchOnUpdate; }
public HierarchicalTransitionValidator(IEqualityComparer <TState> stateComparer, IEqualityComparer <Transition <TState, TTrigger> > transitionEqualityComparer, StateHierarchyBehaviourScheduler <TState, TTrigger> stateHierarchyBehaviourScheduler, StateHierarchy <TState, TTrigger> stateHierarchy) { _stateHierarchyBehaviourScheduler = stateHierarchyBehaviourScheduler; _stateHierarchy = stateHierarchy; _stateComparer = stateComparer; _transitionEqualityComparer = transitionEqualityComparer; _guardConditions = new Dictionary <Transition <TState, TTrigger>, List <IGuardCondition> >(_transitionEqualityComparer); }
public StateHierarchyBehaviourScheduler(IHierarchicalStateMachine <TState, TTrigger> stateMachine, StateHierarchy <TState, TTrigger> stateHierarchy, HierarchicalTransitionCollection <TState, TTrigger> transitions, HierarchicalTransitionValidator <TState, TTrigger> transitionValidator, IEqualityComparer <TState> stateComparer, IEqualityComparer <TTrigger> triggerComparer) { _stateMachine = stateMachine; _stateHierarchy = stateHierarchy; _transitions = transitions; _transitionValidator = transitionValidator; _stateComparer = stateComparer; _triggerComparer = triggerComparer; _activeHierarchyPath = new List <KeyValuePair <TState, IState> >(); }
public HierarchicalStateMachine(IEqualityComparer <TState> stateComparer, IEqualityComparer <TTrigger> triggerComparer) { if (stateComparer == null) { throw new ArgumentNullException(nameof(stateComparer)); } if (triggerComparer == null) { throw new ArgumentNullException(nameof(triggerComparer)); } _stateComparer = new StateEqualityComparer(stateComparer); _triggerComparer = new TriggerEqualityComparer(triggerComparer); _transitionComparer = new TransitionEqualityComparer <TState, TTrigger>(_stateComparer, _triggerComparer); _stateHierarchy = new StateHierarchy <TState, TTrigger>(this, _stateComparer); _stateHierarchyBehaviourScheduler = new StateHierarchyBehaviourScheduler <TState, TTrigger>(this, _stateHierarchy, _transitions, _transitionValidator, _stateComparer, _triggerComparer); _transitionValidator = new HierarchicalTransitionValidator <TState, TTrigger>(_stateComparer, _transitionComparer, _stateHierarchyBehaviourScheduler, _stateHierarchy); _transitions = new HierarchicalTransitionCollection <TState, TTrigger>(this, _stateComparer, _transitionComparer); _eventHandlers = new HierarchicalStateEventHandlerCollection <TState, TTrigger>(this, _stateComparer); _eventDispatcher = new HierarchicalEventDispatcher <TState, TTrigger>(_stateComparer, _eventHandlers, _stateHierarchyBehaviourScheduler); }