public Transition Exit(Transition transition) { if (transition.IsReentry) { ExecuteExitActions(transition); } else if (!Includes(transition.Destination)) { ExecuteExitActions(transition); // Must check if there is a superstate, and if we are leaving that superstate if (_superstate != null) { // Check if destination is within the state list if (IsIncludedIn(transition.Destination)) { // Destination state is within the list, exit first superstate only if it is NOT the the first if (!_superstate.UnderlyingState.Equals(transition.Destination)) { return(_superstate.Exit(transition)); } } else { // Exit the superstate as well return(_superstate.Exit(transition)); } } } return(transition); }
private void HandleTransitioningTrigger(object[] args, StateRepresentation representativeState, Transition transition) { transition = representativeState.Exit(transition); State = transition.Destination; var newRepresentation = GetRepresentation(transition.Destination); // Check if there is an intital transition configured if (newRepresentation.HasInitialTransition) { // Verify that the target state is a substate if (!newRepresentation.GetSubstates().Any(s => s.UnderlyingState.Equals(newRepresentation.InitialTransitionTarget))) { throw new InvalidOperationException($"The target ({newRepresentation.InitialTransitionTarget}) for the initial transition is not a substate."); } // Check if state has substate(s), and if an initial transition(s) has been set up. while (newRepresentation.GetSubstates().Any() && newRepresentation.HasInitialTransition) { var initialTransition = new Transition(transition.Source, newRepresentation.InitialTransitionTarget, transition.Trigger); newRepresentation = GetRepresentation(newRepresentation.InitialTransitionTarget); newRepresentation.Enter(initialTransition, args); State = newRepresentation.UnderlyingState; } //Alert all listeners of state transition _onTransitionedEvent.Invoke(transition); } else { //Alert all listeners of state transition _onTransitionedEvent.Invoke(transition); newRepresentation.Enter(transition, args); } }
private void HandleReentryTrigger(object[] args, StateRepresentation representativeState, Transition transition) { StateRepresentation representation; transition = representativeState.Exit(transition); var newRepresentation = GetRepresentation(transition.Destination); if (!transition.Source.Equals(transition.Destination)) { // Then Exit the final superstate transition = new Transition(transition.Destination, transition.Destination, transition.Trigger, args); newRepresentation.Exit(transition); _onTransitionedEvent.Invoke(transition); representation = EnterState(newRepresentation, transition, args); _onTransitionCompletedEvent.Invoke(transition); } else { _onTransitionedEvent.Invoke(transition); representation = EnterState(newRepresentation, transition, args); _onTransitionCompletedEvent.Invoke(transition); } State = representation.UnderlyingState; }
private void HandleTransitioningTrigger(object[] args, StateRepresentation representativeState, Transition transition) { transition = representativeState.Exit(transition); State = transition.Destination; var newRepresentation = GetRepresentation(transition.Destination); //Alert all listeners of state transition _onTransitionedEvent.Invoke(transition); var representation = EnterState(newRepresentation, transition, args); State = representation.UnderlyingState; }
public void Exit(Transition transition) { Enforce.ArgumentNotNull(transition, nameof(transition)); if (transition.IsReentry) { ExecuteExitActions(transition); } else if (!Includes(transition.Destination)) { ExecuteExitActions(transition); if (_superstate != null) _superstate.Exit(transition); } }
private void HandleReentryTrigger(object[] args, StateRepresentation representativeState, Transition transition) { transition = representativeState.Exit(transition); State = transition.Destination; var newRepresentation = GetRepresentation(transition.Destination); if (!transition.Source.Equals(transition.Destination)) { // Then Exit the final superstate transition = new Transition(transition.Destination, transition.Destination, transition.Trigger); newRepresentation.Exit(transition); } _onTransitionedEvent.Invoke(transition); newRepresentation.Enter(transition, args); }
public void Exit(Transition transition) { if (transition.IsReentry) { ExecuteDeactivationActions(); ExecuteExitActions(transition); } else if (!Includes(transition.Destination)) { ExecuteDeactivationActions(); ExecuteExitActions(transition); if (_superstate != null) { _superstate.Exit(transition); } } }
public void Exit(Transition transition) { if (transition != null) { if (transition.IsReentry) { ExecuteExitActions(transition); } else if (!IncludeState(transition.Destination)) { ExecuteExitActions(transition); if (mSuperState != null) { mSuperState.Exit(transition); } } } }
private void HandleTransitioningTrigger(object[] args, StateRepresentation representativeState, Transition transition) { transition = representativeState.Exit(transition); State = transition.Destination; var newRepresentation = GetRepresentation(transition.Destination); //Alert all listeners of state transition _onTransitionedEvent.Invoke(transition); var representation = EnterState(newRepresentation, transition, args); // Check if state has changed by entering new state (by fireing triggers in OnEntry or such) if (!representation.UnderlyingState.Equals(State)) { // The state has been changed after entering the state, must update current state to new one State = representation.UnderlyingState; } _onTransitionCompletedEvent.Invoke(transition); }
public Transition Exit(Transition transition) { if (transition.IsReentry) { ExecuteDeactivationActions(); ExecuteExitActions(transition); } else if (!Includes(transition.Destination)) { ExecuteDeactivationActions(); ExecuteExitActions(transition); if (_superstate != null) { transition = new Transition(_superstate.UnderlyingState, transition.Destination, transition.Trigger); return(_superstate.Exit(transition)); } } return(transition); }