diff --git a/include/render/gui/TowerGui.h b/include/render/gui/TowerGui.h index 1bdb1e7..310ee76 100644 --- a/include/render/gui/TowerGui.h +++ b/include/render/gui/TowerGui.h @@ -2,32 +2,58 @@ * TowerGUI.h * * Created on: 5 nov. 2020 - * Author: simon + * Author: Persson-dev */ -#ifndef RENDER_GUI_TOWERGUI_H_ -#define RENDER_GUI_TOWERGUI_H_ +#pragma once + +#include struct SDL_Window; typedef void *SDL_GLContext; namespace td { + +namespace client { + +class Client; + +} // namespace client + +namespace gui { + +class MainMenu; +class GameMenu; +class FrameMenu; + +} // namespace gui + namespace render { class Renderer; +class TowerGui { +private: + SDL_Window* m_Window; + SDL_GLContext m_GlContext; + td::render::Renderer* m_Renderer; + std::unique_ptr m_Client; + std::unique_ptr m_MainMenu; + std::unique_ptr m_GameMenu; + std::unique_ptr m_FrameMenu; + + bool m_DemoOpened = false; +public: + TowerGui(SDL_Window* wndow, SDL_GLContext glContext, td::render::Renderer* renderer); + ~TowerGui(); + + void render(); +private: + void initWidgets(); + void tick(); + void beginFrame(); + void endFrame(); +}; + } // namespace render } // namespace td - - -namespace TowerGui { - -void init(SDL_Window* window, SDL_GLContext glContext, td::render::Renderer* renderer); -void render(); -void destroy(); - -} - - - -#endif /* RENDER_GUI_TOWERGUI_H_ */ diff --git a/src/render/gui/TowerGui.cpp b/src/render/gui/TowerGui.cpp index fb75713..b6f9ba8 100644 --- a/src/render/gui/TowerGui.cpp +++ b/src/render/gui/TowerGui.cpp @@ -17,89 +17,74 @@ #include "game/client/Client.h" +namespace td { +namespace render { -namespace TowerGui { - -static SDL_Window* window; -static SDL_GLContext gl_context; -static std::unique_ptr client; -static td::render::Renderer* renderer; -static std::unique_ptr mainMenu; -static std::unique_ptr gameMenu; -static std::unique_ptr frameMenu; - - -void initWidgets() { - mainMenu = std::make_unique(client.get()); - gameMenu = std::make_unique(client.get()); - frameMenu = std::make_unique(client.get()); +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()); } -void init(SDL_Window* sdl_window, SDL_GLContext sdlContext, td::render::Renderer* render) { - window = sdl_window; - gl_context = sdlContext; +TowerGui::TowerGui(SDL_Window* sdl_window, SDL_GLContext glContext, td::render::Renderer* renderer) : m_Window(sdl_window), + m_GlContext(glContext), m_Renderer(renderer), m_Client(std::make_unique(m_Renderer)) { IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGui::StyleColorsDark(); - ImGui_ImplSDL2_InitForOpenGL(sdl_window, gl_context); + ImGui_ImplSDL2_InitForOpenGL(m_Window, m_GlContext); ImGui_ImplOpenGL3_Init(); ImFontConfig c; c.SizePixels = 25; ImGui::GetIO().Fonts->AddFontDefault(&c); - renderer = render; - client = std::make_unique(render); initWidgets(); } -void beginFrame() { +void TowerGui::beginFrame() { ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplSDL2_NewFrame(); ImGui::NewFrame(); } -void endFrame() { +void TowerGui::endFrame() { ImGui::EndFrame(); ImGui::Render(); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); } -void tick() { +void TowerGui::tick() { static std::uint64_t lastTime = td::utils::getTime(); std::uint64_t time = td::utils::getTime(); std::uint64_t delta = time - lastTime; - client->tick(delta); + m_Client->tick(delta); lastTime = td::utils::getTime(); } -void render() { +void TowerGui::render() { tick(); beginFrame(); - client->render(); - if (client->isConnected()) - gameMenu->render(); + m_Client->render(); + if (m_Client->isConnected()) + m_GameMenu->render(); else - mainMenu->render(); - static bool demo_open = false; - if (demo_open) - ImGui::ShowDemoWindow(&demo_open); - frameMenu->render(); + m_MainMenu->render(); + + if (m_DemoOpened) + ImGui::ShowDemoWindow(&m_DemoOpened); + m_FrameMenu->render(); endFrame(); } -void destroy() { - client->closeConnection(); - client.reset(); - mainMenu.reset(); - gameMenu.reset(); - frameMenu.reset(); +TowerGui::~TowerGui() { + m_Client->closeConnection(); ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplSDL2_Shutdown(); ImGui::DestroyContext(); } -} +} // namespace render +} // namespace td diff --git a/src/window/Display.cpp b/src/window/Display.cpp index 1ec4ed6..c638f9a 100644 --- a/src/window/Display.cpp +++ b/src/window/Display.cpp @@ -28,6 +28,7 @@ static SDL_Window* window; static SDL_GLContext glContext; std::unique_ptr renderer = std::make_unique(); +std::unique_ptr towerGui; static int lastWidth = 0, lastHeight = 0; static float aspectRatio; @@ -102,14 +103,14 @@ bool create() { if (!renderer->init()) { exit(1); } - TowerGui::init(window, glContext, renderer.get()); + towerGui = std::make_unique(window, glContext, renderer.get()); windowResizeEvent(WINDOW_WIDTH, WINDOW_HEIGHT); return true; } void render() { renderer->prepare(); - TowerGui::render(); + towerGui->render(); } void update() { @@ -118,7 +119,7 @@ void update() { void destroy() { renderer.reset(0); - TowerGui::destroy(); + towerGui.reset(0); SDL_GL_DeleteContext(glContext); SDL_DestroyWindow(window); SDL_Quit();