public AbstractEnterExitStateHandler Pop()
    {
        AbstractEnterExitStateHandler result = activeStateHandler;

        activeStateHandler = null;
        return(result);
    }
 public void Push(AbstractEnterExitStateHandler stateHandler)
 {
     if (activeStateHandler != null)
     {
         Pop().OnExit();
     }
     activeStateHandler = stateHandler;
 }
 public void OnStateChanged(string state)
 {
     if (state == HandledState && !isInHandledState)
     {
         isInHandledState = true;
         exitHandler.Push(this);
         OnEnter();
     }
     else if (state != HandledState && isInHandledState)
     {
         isInHandledState = false;
         AbstractEnterExitStateHandler x = exitHandler.Pop();
         if (x == this)
         {
             OnExit();
         }
     }
 }