GameLoop

La GameLoop, armée de sa seule fonction Run(Scene* _scene),
se charge de faire tourner le programme.

    void GameLoop::Run(Scene* _scene)
    {
        while (m_window->IsDone() == false)
        {
            //EVENT SECTION =====================================================================
            sf::Event event;
            while (m_window->PollEvent(event))
            {
                if ((event.type == sf::Event::Closed) || (event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::Key::Escape))
                    m_window->WindowDestroy();
                else
                    _scene->HandleEvent(event, m_window->GetRW());
            }
            //===================================================================================

            //TEMPS
            TimeTool::RestartClock();
            m_keyTimer += timeDelta;
            sf::Joystick::update();

            if (sf::Keyboard::isKeyPressed(sf::Keyboard::F9) && m_keyTimer > 0.2f)
            {
                m_window->ToggleFullscreen();
                m_keyTimer = 0.f;
            }

            //Les ressources de la GameSection sont prete, donc on peut s'en servir
            if (_scene->IsReady())
            {
                _scene->Update(m_window->GetRW());

                m_window->BeginDraw();
                if (_scene->IsStopped() == false)
                    _scene->Display(m_window->GetRW());
                m_window->EndDraw();
            }

            //Recupere l'éventuelle Scene préparée en m_nextScene de la Scene en cour
            Scene* nextScene = _scene->PullNextScene();
            if (nextScene != nullptr) //Si elle n'est pas null, alors on s'en sert pour remplacer l'actuelle
            {
                if (nextScene->IsInited() == false)
                {
                    if (nextScene->UseRessourceManagerFromPreviousScene())
                        nextScene->SetRessourceManager(_scene->GetRessourceManager());

                    nextScene->Init();
                }
                delete _scene; //Cette destruction de la Scene se charge de détruire les ressources qui ne serviront plus.
                _scene = nextScene;
            }
            bool quitGame = _scene->PullQuitGame();
            if (quitGame)
            {
                m_window->GetRW().close();
            }
        }
        delete _scene; //Fenetre fermée, donc on détruit la Scene, et donc ses composants.
    }
}