From 6585ee9ae8ef7fedb3cf7fdd3d83c933be703dff Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sat, 26 Mar 2016 18:55:39 +0100 Subject: [PATCH] Refactor some references to CRobotMain from CEngine --- src/app/app.cpp | 2 +- src/common/event.cpp | 2 ++ src/common/event.h | 4 ++++ src/graphics/engine/engine.cpp | 9 +++++--- src/graphics/engine/engine.h | 8 ++++--- src/level/robotmain.cpp | 41 ++++++++++++++-------------------- src/level/robotmain.h | 3 --- 7 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/app/app.cpp b/src/app/app.cpp index 5e91af9a..fbf6018f 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -822,7 +822,7 @@ bool CApplication::ChangeVideoConfig(const Gfx::DeviceConfig &newConfig) m_device->ConfigChanged(m_deviceConfig); - m_engine->ResetAfterVideoConfigChanged(); + m_eventQueue->AddEvent(Event(EVENT_RESOLUTION_CHANGED)); return true; } diff --git a/src/common/event.cpp b/src/common/event.cpp index ccd7fe8a..49b5218d 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -68,6 +68,8 @@ void InitializeEventTypeTexts() EVENT_TYPE_TEXT[EVENT_UPDINTERFACE] = "EVENT_UPDINTERFACE"; + EVENT_TYPE_TEXT[EVENT_RESOLUTION_CHANGED]= "EVENT_RESOLUTION_CHANGED"; + EVENT_TYPE_TEXT[EVENT_RELOAD_TEXTURES] = "EVENT_RELOAD_TEXTURES"; EVENT_TYPE_TEXT[EVENT_WIN] = "EVENT_WIN"; EVENT_TYPE_TEXT[EVENT_LOST] = "EVENT_LOST"; diff --git a/src/common/event.h b/src/common/event.h index 50fb0c98..b4eb79fa 100644 --- a/src/common/event.h +++ b/src/common/event.h @@ -95,6 +95,10 @@ enum EventType //! Event sent on user quit request EVENT_QUIT = 20, EVENT_UPDINTERFACE = 21, + //! Event sent on resolution change + EVENT_RESOLUTION_CHANGED = 22, + //! Event sent when textures have to be reloaded + EVENT_RELOAD_TEXTURES = 23, EVENT_WIN = 30, EVENT_LOST = 31, diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp index a66f8063..afc8a173 100644 --- a/src/graphics/engine/engine.cpp +++ b/src/graphics/engine/engine.cpp @@ -359,8 +359,6 @@ void CEngine::ResetAfterVideoConfigChanged() m_size = m_app->GetVideoConfig().size; m_mouseSize = Math::Point(0.04f, 0.04f * (static_cast(m_size.x) / static_cast(m_size.y))); - CRobotMain::GetInstancePointer()->ResetAfterVideoConfigChanged(); //TODO: Remove cross-reference to CRobotMain - // Update the camera projection matrix for new aspect ratio SetFocus(m_focus); @@ -373,13 +371,18 @@ void CEngine::ReloadAllTextures() FlushTextureCache(); m_text->FlushCache(); - CRobotMain::GetInstancePointer()->ReloadAllTextures(); //TODO: Remove cross-reference to CRobotMain + m_app->GetEventQueue()->AddEvent(Event(EVENT_RELOAD_TEXTURES)); UpdateGroundSpotTextures(); LoadAllTextures(); } bool CEngine::ProcessEvent(const Event &event) { + if (event.type == EVENT_RESOLUTION_CHANGED) + { + ResetAfterVideoConfigChanged(); + } + if (event.type == EVENT_KEY_DOWN) { auto data = event.GetData(); diff --git a/src/graphics/engine/engine.h b/src/graphics/engine/engine.h index 5fc65a2c..bda5f782 100644 --- a/src/graphics/engine/engine.h +++ b/src/graphics/engine/engine.h @@ -655,9 +655,6 @@ public: //! Frees all resources before exit void Destroy(); - //! Resets some states and flushes textures after device was changed (e.g. resoulution changed) - void ResetAfterVideoConfigChanged(); - //! Called once per frame, the call is the entry point for rendering void Render(); @@ -1188,6 +1185,10 @@ public: void AddDisplayCrashSpheres(const std::vector& crashSpheres); protected: + //! Resets some states and flushes textures after device was changed (e.g. resoulution changed) + /** Instead of calling this directly, send EVENT_RESOLUTION_CHANGED event **/ + void ResetAfterVideoConfigChanged(); + //! Prepares the interface for 3D scene void Draw3DScene(); //! Renders shadow map @@ -1281,6 +1282,7 @@ protected: static void WriteScreenShotThread(std::unique_ptr data); //! Reloads all textures + /** This additionally sends EVENT_RELOAD_TEXTURES to reload all textures not maintained by CEngine **/ void ReloadAllTextures(); protected: diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp index 514d2181..9a841e6d 100644 --- a/src/level/robotmain.cpp +++ b/src/level/robotmain.cpp @@ -303,30 +303,6 @@ CPauseManager* CRobotMain::GetPauseManager() return m_pause.get(); } -void CRobotMain::ResetAfterVideoConfigChanged() -{ - // Recreate the interface (needed if the aspect ratio changes) - // TODO: This can sometimes cause unwanted side effects, like hidden windows reappearing. To be fixed during CEGUI refactoring. - m_eventQueue->AddEvent(Event(EVENT_UPDINTERFACE)); - CreateShortcuts(); -} - -void CRobotMain::ReloadAllTextures() -{ - if (m_phase == PHASE_SETUPds || - m_phase == PHASE_SETUPgs || - m_phase == PHASE_SETUPps || - m_phase == PHASE_SETUPcs || - m_phase == PHASE_SETUPss || - m_phase == PHASE_SIMUL || - m_phase == PHASE_WIN || - m_phase == PHASE_LOST) - { - ChangeColor(); - UpdateMap(); - } -} - std::string PhaseToString(Phase phase) { if (phase == PHASE_WELCOME1) return "PHASE_WELCOME1"; @@ -693,6 +669,23 @@ bool CRobotMain::ProcessEvent(Event &event) return EventFrame(event); } + if (event.type == EVENT_RELOAD_TEXTURES) + { + if (IsPhaseWithWorld(m_phase)) + { + ChangeColor(); + UpdateMap(); + } + } + + if (event.type == EVENT_RESOLUTION_CHANGED) + { + // Recreate the interface (needed if the aspect ratio changes) + // TODO: This can sometimes cause unwanted side effects, like hidden windows reappearing. To be fixed during CEGUI refactoring. + m_eventQueue->AddEvent(Event(EVENT_UPDINTERFACE)); + CreateShortcuts(); + } + if (event.type == EVENT_FOCUS_LOST) { GetLogger()->Trace("Window unfocused\n"); diff --git a/src/level/robotmain.h b/src/level/robotmain.h index 991c97ce..dd409888 100644 --- a/src/level/robotmain.h +++ b/src/level/robotmain.h @@ -161,9 +161,6 @@ public: Ui::CDisplayText* GetDisplayText(); CPauseManager* GetPauseManager(); - void ResetAfterVideoConfigChanged(); - void ReloadAllTextures(); - void ChangePhase(Phase phase); bool ProcessEvent(Event &event); Phase GetPhase();