/** * Perform a state change if possible. * @param trigger The trigger that may initiate a state change. * @param context Reference to the context. */ protected void changeState(T trigger, C context) { checkArgument(transitionTable.contains(currentState, trigger), "The trigger %s is not supported when in state %s.", trigger, currentState); final State<T, C> newState = transitionTable.get(currentState, trigger); if (!newState.equals(currentState) || explicitRecursiveTransitions) { currentState.onExit(trigger, context); final State<T, C> oldState = currentState; currentState = newState; currentState.onEntry(trigger, context); eventDispatcher.dispatchEvent(new StateTransitionEvent<>(this, oldState, trigger, newState)); } }
/** * Perform a state change if possible. * @param trigger The trigger that may initiate a state change. * @param context Reference to the context. */ protected void changeState(T trigger, C context) { checkArgument(transitionTable.contains(currentState, trigger), "The trigger %s is not supported when in state %s.", trigger, currentState); final State<T, C> newState = transitionTable.get(currentState, trigger); if (!newState.equals(currentState) || explicitRecursiveTransitions) { currentState.onExit(trigger, context); final State<T, C> oldState = currentState; currentState = newState; currentState.onEntry(trigger, context); eventDispatcher.dispatchEvent(new StateTransitionEvent<>(this, oldState, trigger, newState)); } }