void GameState::onEvent()
{
    while (SDL_PollEvent(&event))
    {
        if (event.type == SDL_QUIT)
        {
            applicationStateManager->setNextState(STATE_EXIT);
        }
        else if (event.type == SDL_KEYDOWN)
        {
            switch(event.key.keysym.scancode)
            {
                case SDL_SCANCODE_ESCAPE:
                    applicationStateManager->pushStateOnStack(STATE_GAMEMENU);
                    setPauseStatus(PAUSED_THIS_FRAME);
                    break;

                case SDL_SCANCODE_P:
                    applicationStateManager->pushStateOnStack(STATE_PAUSE);
                    setPauseStatus(PAUSED_THIS_FRAME);
                    break;
            }
        }
        gameEntityManager.onEvent(&event);
    }
}
	void ExecutionWindow::on_debugPushButton_clicked()
	{
		setPauseStatus(true);
	}
	void ExecutionWindow::onEvaluationPaused()
	{
		setPauseStatus(true);
	}
	void ExecutionWindow::onEvaluationResumed()
	{
		setPauseStatus(false);
	}
void GameState::onUpdate()
{
    if (blackScreen.isBlackingIn())
    {
        blackScreen.onUpdate();
        if (!blackScreen.isBlackingIn())
        {
            //Do something when black in is done
        }
    }
    else if (blackScreen.isBlackingOut())
    {
        blackScreen.onUpdate();
        if (!blackScreen.isBlackingOut())
        {
            applicationStateManager->setNextState(nextState);
        }
    }

    if (playerDestroyed)
    {
        if (lives>0)
        {
            player = gameEntityManager.getFactory()->createEntity("player");
        }
        else
        {
            gameOverTimer.start();
        }
        playerDestroyed = false;
    }

    if (gameOverTimer.isStarted())
    {
        if (gameOverTimer.getTimeOnTimer()>3000)
        {
            applicationStateManager->pushStateOnStack(STATE_GAMEOVER);
            setPauseStatus(PAUSED_THIS_FRAME);
            AudioSystem::getInstance()->stopMusic();
            gameOverTimer.stop();
        }
    }

    if (victoryTimer.isStarted())
    {
        if (victoryTimer.getTimeOnTimer()>3000)
        {
            applicationStateManager->pushStateOnStack(STATE_VICTORY);
            setPauseStatus(PAUSED_THIS_FRAME);
            AudioSystem::getInstance()->stopMusic();
            victoryTimer.stop();
        }
    }

    level.onUpdate();
    while (!level.getSpawningQueue().empty())
    {
        SpawnData data = level.popSpawningQueue();
        gameEntityManager.getFactory()->createEntity(data);
    }

    gameEntityManager.onUpdate();
    if (pauseStatus == PAUSED_THIS_FRAME)
    {
        gameEntityManager.pauseAllTimers();
        level.pauseTimers();
        AudioSystem::getInstance()->pauseMusic();
        setPauseStatus(PAUSED_NONE);
    }
    else if (pauseStatus == UNPAUSED_THIS_FRAME)
    {
        gameEntityManager.resumeAllTimers();
        level.resumeTimers();
        AudioSystem::getInstance()->playMusic();
        setPauseStatus(PAUSED_NONE);
    }
}