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