refactor: changed TowerGui to class
This commit is contained in:
@@ -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_ */
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user