diff --git a/include/render/gui/GuiManager.h b/include/render/gui/GuiManager.h index a4409ca..e8a369d 100644 --- a/include/render/gui/GuiManager.h +++ b/include/render/gui/GuiManager.h @@ -10,15 +10,17 @@ namespace gui { class GuiManager { private: - std::vector> m_Widgets; + std::vector> m_Widgets; public: + GuiManager(){} + void renderWidgets() { - for (auto widget : m_Widgets) { + for (auto& widget : m_Widgets) { widget->render(); } } - void addWidgets(const std::shared_ptr& widget) { + void addWidget(std::unique_ptr&& widget) { m_Widgets.push_back(std::move(widget)); } }; diff --git a/include/render/gui/TowerGui.h b/include/render/gui/TowerGui.h index 142cd3e..90405ad 100644 --- a/include/render/gui/TowerGui.h +++ b/include/render/gui/TowerGui.h @@ -9,6 +9,8 @@ #include +#include "render/gui/GuiManager.h" + struct SDL_Window; typedef void* SDL_GLContext; @@ -20,15 +22,6 @@ class Client; } // namespace client -namespace gui { - -class MainMenu; -class GameMenu; -class FrameMenu; -class UpdateMenu; - -} // namespace gui - namespace render { class Renderer; @@ -38,11 +31,8 @@ private: SDL_Window* m_Window; SDL_GLContext m_GlContext; td::render::Renderer* m_Renderer; + td::gui::GuiManager m_GuiManager; std::unique_ptr m_Client; - std::unique_ptr m_MainMenu; - std::unique_ptr m_GameMenu; - std::unique_ptr m_FrameMenu; - std::unique_ptr m_UpdateMenu; public: TowerGui(SDL_Window* wndow, SDL_GLContext glContext, td::render::Renderer* renderer); ~TowerGui(); diff --git a/src/render/gui/GameMenu.cpp b/src/render/gui/GameMenu.cpp index 5cdd13f..172bbf0 100644 --- a/src/render/gui/GameMenu.cpp +++ b/src/render/gui/GameMenu.cpp @@ -14,6 +14,8 @@ GameMenu::GameMenu(client::Client* client) : GuiWidget(client), m_SummonMenu(std } void GameMenu::render() { + if(!m_Client->isConnected()) return; + if (getClient()->getGame().getGameState() == td::game::GameState::Lobby) { ImGui::Begin("Lobby"); diff --git a/src/render/gui/MainMenu.cpp b/src/render/gui/MainMenu.cpp index 1e5e4d0..744d03b 100644 --- a/src/render/gui/MainMenu.cpp +++ b/src/render/gui/MainMenu.cpp @@ -18,6 +18,12 @@ MainMenu::~MainMenu() { } void MainMenu::render() { + if (m_Server != nullptr && !m_Server->isRunning()) { + m_Server.reset(0); // destroying server if it stoped + } + + if(m_Client->isConnected()) return; + ImGui::Begin("Main Menu"); if (ImGui::Button("Rejoindre une partie##join")) { ImGui::OpenPopup("Rejoindre une partie##join_popup"); diff --git a/src/render/gui/TowerGui.cpp b/src/render/gui/TowerGui.cpp index d1cd41a..52332f4 100644 --- a/src/render/gui/TowerGui.cpp +++ b/src/render/gui/TowerGui.cpp @@ -22,10 +22,10 @@ namespace td { namespace render { void TowerGui::initWidgets() { - m_MainMenu = std::make_unique(m_Client.get()); - m_GameMenu = std::make_unique(m_Client.get()); - m_FrameMenu = std::make_unique(m_Client.get()); - m_UpdateMenu = std::make_unique(m_Client.get()); + m_GuiManager.addWidget(std::make_unique(m_Client.get())); + m_GuiManager.addWidget(std::make_unique(m_Client.get())); + m_GuiManager.addWidget(std::make_unique(m_Client.get())); + m_GuiManager.addWidget(std::make_unique(m_Client.get())); } TowerGui::TowerGui(SDL_Window* sdl_window, SDL_GLContext glContext, td::render::Renderer* renderer) : m_Window(sdl_window), @@ -69,13 +69,8 @@ void TowerGui::render() { beginFrame(); m_Client->render(); - if (m_Client->isConnected()) - m_GameMenu->render(); - else - m_MainMenu->render(); - m_FrameMenu->render(); - m_UpdateMenu->render(); + m_GuiManager.renderWidgets(); endFrame(); }