diff --git a/src/application.cpp b/src/application.cpp index 4589371..e12eb71 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -94,7 +94,11 @@ void Application::Proc() { if (simTime < realTime) { while(simTime < realTime) { //call the user defined functions - activeScene->RunFrame(); + activeScene->FrameStart(); + ProcessEvents(); + activeScene->Update(); + activeScene->FrameEnd(); + //step to the next frame simTime += frameDelay; } @@ -125,6 +129,43 @@ void Application::Quit() { //Scene management //------------------------- +void Application::ProcessEvents() { + SDL_Event event; + while(SDL_PollEvent(&event)) { + switch(event.type) { + case SDL_QUIT: + activeScene->QuitEvent(); + break; + + case SDL_MOUSEMOTION: + activeScene->MouseMotion(event.motion); + break; + + case SDL_MOUSEBUTTONDOWN: + activeScene->MouseButtonDown(event.button); + break; + + case SDL_MOUSEBUTTONUP: + activeScene->MouseButtonUp(event.button); + break; + + case SDL_MOUSEWHEEL: + activeScene->MouseWheel(event.wheel); + break; + + case SDL_KEYDOWN: + activeScene->KeyDown(event.key); + break; + + case SDL_KEYUP: + activeScene->KeyUp(event.key); + break; + + //TODO: joystick and controller events + } + } +} + //Add the custom scene headers here #include "example_scene.hpp" diff --git a/src/application.hpp b/src/application.hpp index 9ec19ca..73fa599 100644 --- a/src/application.hpp +++ b/src/application.hpp @@ -43,6 +43,7 @@ public: private: //scene management + void ProcessEvents(); void ProcessSceneSignal(SceneSignal); void ClearScene(); diff --git a/src/base_scene.cpp b/src/base_scene.cpp index 38dab00..f637710 100644 --- a/src/base_scene.cpp +++ b/src/base_scene.cpp @@ -31,13 +31,6 @@ BaseScene::~BaseScene() { //EMPTY } -void BaseScene::RunFrame() { - FrameStart(); - ProcessEvents(); - Update(); - FrameEnd(); -} - void BaseScene::RenderFrame(SDL_Renderer* renderer) { //EMPTY } @@ -66,43 +59,6 @@ void BaseScene::FrameStart() { //EMPTY } -void BaseScene::ProcessEvents() { - SDL_Event event; - while(SDL_PollEvent(&event)) { - switch(event.type) { - case SDL_QUIT: - QuitEvent(); - break; - - case SDL_MOUSEMOTION: - MouseMotion(event.motion); - break; - - case SDL_MOUSEBUTTONDOWN: - MouseButtonDown(event.button); - break; - - case SDL_MOUSEBUTTONUP: - MouseButtonUp(event.button); - break; - - case SDL_MOUSEWHEEL: - MouseWheel(event.wheel); - break; - - case SDL_KEYDOWN: - KeyDown(event.key); - break; - - case SDL_KEYUP: - KeyUp(event.key); - break; - - //TODO: joystick and controller events - } - } -} - void BaseScene::Update() { //EMPTY } diff --git a/src/base_scene.hpp b/src/base_scene.hpp index bc8ed63..96a4085 100644 --- a/src/base_scene.hpp +++ b/src/base_scene.hpp @@ -30,20 +30,12 @@ public: BaseScene(); virtual ~BaseScene(); - virtual void RunFrame(); virtual void RenderFrame(SDL_Renderer*); - static void SetRenderer(SDL_Renderer*); SceneSignal GetSceneSignal(); -protected: - //control - static SDL_Renderer* GetRenderer(); - void SetSceneSignal(SceneSignal); - //frame phases virtual void FrameStart(); - virtual void ProcessEvents(); virtual void Update(); virtual void FrameEnd(); @@ -58,6 +50,11 @@ protected: //TODO: joystick and controller events +protected: + //control + static SDL_Renderer* GetRenderer(); + void SetSceneSignal(SceneSignal); + private: static SDL_Renderer* rendererHandle; SceneSignal sceneSignal = SceneSignal::CONTINUE;