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
*
* Created on: 5 nov. 2020
* Author: simon
* Author: Persson-dev
*/
#ifndef RENDER_GUI_TOWERGUI_H_
#define RENDER_GUI_TOWERGUI_H_
#pragma once
#include <memory>
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<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 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"
namespace td {
namespace render {
namespace TowerGui {
static SDL_Window* window;
static SDL_GLContext gl_context;
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 TowerGui::initWidgets() {
m_MainMenu = std::make_unique<td::gui::MainMenu>(m_Client.get());
m_GameMenu = std::make_unique<td::gui::GameMenu>(m_Client.get());
m_FrameMenu = std::make_unique<td::gui::FrameMenu>(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<client::Client>(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<td::client::Client>(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

View File

@@ -28,6 +28,7 @@ static SDL_Window* window;
static SDL_GLContext glContext;
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 float aspectRatio;
@@ -102,14 +103,14 @@ bool create() {
if (!renderer->init()) {
exit(1);
}
TowerGui::init(window, glContext, renderer.get());
towerGui = std::make_unique<td::render::TowerGui>(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();