Exemple #1
0
        private void PerformChangeState()
        {
            if (requestedNewState == null)
            {
                throw new ArgumentNullException("requestedNewState");
            }
            if (requestedNewState.Owner == null)
            {
                throw new ArgumentNullException("requestedNewState.owner");
            }

            Log.AI(owner.ToString(), "Changing state to " + requestedNewState.ToString());

            State previousState = CurrentState;

            Log.AI(owner.ToString(), "Previous state was " + (previousState != null ? previousState.ToString() : "null"));

            if (CurrentState != null)
            {
                CurrentState.Leave();
            }

            CurrentState      = requestedNewState;
            requestedNewState = null;

            if (CurrentState.Enter() == false)
            {
                CurrentState = null;
                Log.AI(owner.ToString(), "Failed to enter new state. Reverting to previous state.");
                ChangeState(previousState);
            }
        }