private void PerformChangeState() { if (requestedNewState == null) throw new ArgumentNullException("requestedNewState"); if (requestedNewState.Owner == null) throw new ArgumentNullException("requestedNewState.owner"); Log.AI(owner, "Changing state to " + requestedNewState.ToString()); State previousState = CurrentState; Log.AI(owner, "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, "Failed to enter new state. Reverting to previous state."); ChangeState(previousState); } }
internal void ChangeState(State newState) { requestedNewState = newState; }
internal StateMachine(Entity setOwner) { owner = setOwner; CurrentState = null; requestedNewState = null; }