refactor: changed TowerGui to class

This commit is contained in:
2021-11-10 15:10:29 +01:00
parent cd9358f0b9
commit e682224d78
3 changed files with 72 additions and 60 deletions

View File

@@ -2,32 +2,58 @@
* TowerGUI.h * TowerGUI.h
* *
* Created on: 5 nov. 2020 * Created on: 5 nov. 2020
* Author: simon * Author: Persson-dev
*/ */
#ifndef RENDER_GUI_TOWERGUI_H_ #pragma once
#define RENDER_GUI_TOWERGUI_H_
#include <memory>
struct SDL_Window; struct SDL_Window;
typedef void *SDL_GLContext; typedef void *SDL_GLContext;
namespace td { namespace td {
namespace client {
class Client;
} // namespace client
namespace gui {
class MainMenu;
class GameMenu;
class FrameMenu;
} // namespace gui
namespace render { namespace render {
class Renderer; class Renderer;
class TowerGui {
private:
SDL_Window* m_Window;
SDL_GLContext m_GlContext;
td::render::Renderer* m_Renderer;
std::unique_ptr<td::client::Client> m_Client;
std::unique_ptr<td::gui::MainMenu> m_MainMenu;
std::unique_ptr<td::gui::GameMenu> m_GameMenu;
std::unique_ptr<td::gui::FrameMenu> 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 render
} // namespace td } // 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_ */

View File

@@ -17,89 +17,74 @@
#include "game/client/Client.h" #include "game/client/Client.h"
namespace td {
namespace render {
namespace TowerGui { void TowerGui::initWidgets() {
m_MainMenu = std::make_unique<td::gui::MainMenu>(m_Client.get());
static SDL_Window* window; m_GameMenu = std::make_unique<td::gui::GameMenu>(m_Client.get());
static SDL_GLContext gl_context; m_FrameMenu = std::make_unique<td::gui::FrameMenu>(m_Client.get());
static std::unique_ptr<td::client::Client> client;
static td::render::Renderer* renderer;
static std::unique_ptr<td::gui::MainMenu> mainMenu;
static std::unique_ptr<td::gui::GameMenu> gameMenu;
static std::unique_ptr<td::gui::FrameMenu> frameMenu;
void initWidgets() {
mainMenu = std::make_unique<td::gui::MainMenu>(client.get());
gameMenu = std::make_unique<td::gui::GameMenu>(client.get());
frameMenu = std::make_unique<td::gui::FrameMenu>(client.get());
} }
void init(SDL_Window* sdl_window, SDL_GLContext sdlContext, td::render::Renderer* render) { TowerGui::TowerGui(SDL_Window* sdl_window, SDL_GLContext glContext, td::render::Renderer* renderer) : m_Window(sdl_window),
window = sdl_window; m_GlContext(glContext), m_Renderer(renderer), m_Client(std::make_unique<client::Client>(m_Renderer)) {
gl_context = sdlContext;
IMGUI_CHECKVERSION(); IMGUI_CHECKVERSION();
ImGui::CreateContext(); ImGui::CreateContext();
ImGui::StyleColorsDark(); ImGui::StyleColorsDark();
ImGui_ImplSDL2_InitForOpenGL(sdl_window, gl_context); ImGui_ImplSDL2_InitForOpenGL(m_Window, m_GlContext);
ImGui_ImplOpenGL3_Init(); ImGui_ImplOpenGL3_Init();
ImFontConfig c; ImFontConfig c;
c.SizePixels = 25; c.SizePixels = 25;
ImGui::GetIO().Fonts->AddFontDefault(&c); ImGui::GetIO().Fonts->AddFontDefault(&c);
renderer = render;
client = std::make_unique<td::client::Client>(render);
initWidgets(); initWidgets();
} }
void beginFrame() { void TowerGui::beginFrame() {
ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplSDL2_NewFrame(); ImGui_ImplSDL2_NewFrame();
ImGui::NewFrame(); ImGui::NewFrame();
} }
void endFrame() { void TowerGui::endFrame() {
ImGui::EndFrame(); ImGui::EndFrame();
ImGui::Render(); ImGui::Render();
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
} }
void tick() { void TowerGui::tick() {
static std::uint64_t lastTime = td::utils::getTime(); static std::uint64_t lastTime = td::utils::getTime();
std::uint64_t time = td::utils::getTime(); std::uint64_t time = td::utils::getTime();
std::uint64_t delta = time - lastTime; std::uint64_t delta = time - lastTime;
client->tick(delta); m_Client->tick(delta);
lastTime = td::utils::getTime(); lastTime = td::utils::getTime();
} }
void render() { void TowerGui::render() {
tick(); tick();
beginFrame(); beginFrame();
client->render(); m_Client->render();
if (client->isConnected()) if (m_Client->isConnected())
gameMenu->render(); m_GameMenu->render();
else else
mainMenu->render(); m_MainMenu->render();
static bool demo_open = false;
if (demo_open) if (m_DemoOpened)
ImGui::ShowDemoWindow(&demo_open); ImGui::ShowDemoWindow(&m_DemoOpened);
frameMenu->render(); m_FrameMenu->render();
endFrame(); endFrame();
} }
void destroy() { TowerGui::~TowerGui() {
client->closeConnection(); m_Client->closeConnection();
client.reset();
mainMenu.reset();
gameMenu.reset();
frameMenu.reset();
ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplOpenGL3_Shutdown();
ImGui_ImplSDL2_Shutdown(); ImGui_ImplSDL2_Shutdown();
ImGui::DestroyContext(); ImGui::DestroyContext();
} }
} } // namespace render
} // namespace td

View File

@@ -28,6 +28,7 @@ static SDL_Window* window;
static SDL_GLContext glContext; static SDL_GLContext glContext;
std::unique_ptr<td::render::Renderer> renderer = std::make_unique<td::render::Renderer>(); std::unique_ptr<td::render::Renderer> renderer = std::make_unique<td::render::Renderer>();
std::unique_ptr<td::render::TowerGui> towerGui;
static int lastWidth = 0, lastHeight = 0; static int lastWidth = 0, lastHeight = 0;
static float aspectRatio; static float aspectRatio;
@@ -102,14 +103,14 @@ bool create() {
if (!renderer->init()) { if (!renderer->init()) {
exit(1); exit(1);
} }
TowerGui::init(window, glContext, renderer.get()); towerGui = std::make_unique<td::render::TowerGui>(window, glContext, renderer.get());
windowResizeEvent(WINDOW_WIDTH, WINDOW_HEIGHT); windowResizeEvent(WINDOW_WIDTH, WINDOW_HEIGHT);
return true; return true;
} }
void render() { void render() {
renderer->prepare(); renderer->prepare();
TowerGui::render(); towerGui->render();
} }
void update() { void update() {
@@ -118,7 +119,7 @@ void update() {
void destroy() { void destroy() {
renderer.reset(0); renderer.reset(0);
TowerGui::destroy(); towerGui.reset(0);
SDL_GL_DeleteContext(glContext); SDL_GL_DeleteContext(glContext);
SDL_DestroyWindow(window); SDL_DestroyWindow(window);
SDL_Quit(); SDL_Quit();