public void NewGameState(GameStates.GameStateType newState)
    {
        // (1) state EXIT actions
        OnMyStateExit(currentState);

        // (2) change current state
        currentState = newState;

        // (3) state ENTER actions
        OnMyStateEnter(currentState);

        PostMessageDivider();
    }
    //--------- OnMyStateExit[ S ] - state specific actions
    private void OnMyStateExit(GameStates.GameStateType state)
    {
        string exitMessage = "EXIT state: " + state.ToString();

        PostMessage(exitMessage);

        switch (state)
        {
        case GameStates.GameStateType.GamePlaying:
            OnMyStateExitGamePlaying();
            break;

        case GameStates.GameStateType.GameWon:
            // do nothing
            break;

        case GameStates.GameStateType.GameLost:
            // do nothing
            break;
        }
    }
    //--------- OnMyStateEnter[ S ] - state specific actions
    private void OnMyStateEnter(GameStates.GameStateType state)
    {
        string enterMessage = "ENTER state: " +
                              state.ToString();

        PostMessage(enterMessage);

        switch (state)
        {
        case GameStates.GameStateType.GamePlaying:
            OnMyStateEnterGamePlaying();
            break;

        case GameStates.GameStateType.GameWon:
            // do nothing
            break;

        case GameStates.GameStateType.GameLost:
            // do nothing
            break;
        }
    }
 void Start()
 {
     currentState = GameStates.GameStateType.GamePlaying;
 }