private void OnReadyToChangeState(AIState state) { _currentState.OnReadyToChangeState -= OnReadyToChangeState; AIState nextState = state; if (_queuedAIStates.Count > 0) { nextState = _queuedAIStates.Dequeue(); } _currentState?.Exit(nextState); _currentState = nextState; _currentState.OnReadyToChangeState += OnReadyToChangeState; _currentState?.Enter(); }
public virtual void Exit(AIState nextState) { // is this state on the next state's path? if (nextState.IsStateOnPath(this)) { // if so, no need to exit this state return; } if (_parentState != null) { _parentState.Exit(nextState); _parentState.OnReadyToChangeState -= FireReadyToChangeState; } Active = false; }