diff --git a/include/client/render/gui/MainMenu.h b/include/client/render/gui/MainMenu.h index e084319..5374a2c 100644 --- a/include/client/render/gui/MainMenu.h +++ b/include/client/render/gui/MainMenu.h @@ -11,6 +11,8 @@ namespace td { namespace gui { +class ServerGui; + class MainMenu : public GuiWidget { private: bool m_TriedToConnect = false; @@ -22,6 +24,7 @@ private: imgui_addons::ImGuiFileBrowser m_FileDialog; std::unique_ptr m_Server; + std::unique_ptr m_ServerGui; public: MainMenu(client::Client* client); ~MainMenu(); diff --git a/include/client/render/gui/ServerGui.h b/include/client/render/gui/ServerGui.h new file mode 100644 index 0000000..eec66a1 --- /dev/null +++ b/include/client/render/gui/ServerGui.h @@ -0,0 +1,19 @@ +#pragma once + +#include "GuiWidget.h" +#include "server/Server.h" + +namespace td { +namespace gui { + +class ServerGui : public GuiWidget { +private: + server::Server* m_Server; +public: + ServerGui(client::Client* client, server::Server* server); + + virtual void Render(); +}; + +} // namespace gui +} // namespace td diff --git a/include/server/Server.h b/include/server/Server.h index e4087f8..dff12ac 100644 --- a/include/server/Server.h +++ b/include/server/Server.h @@ -79,6 +79,7 @@ public: void BroadcastPacket(const protocol::Packet* packet); + float GetMSPT() const { return m_TickCounter.GetMSPT(); } float GetTPS() const { return m_TickCounter.GetTPS(); } bool IsRunning() { return m_ServerRunning; } diff --git a/src/client/render/gui/MainMenu.cpp b/src/client/render/gui/MainMenu.cpp index d645f7b..aee3793 100644 --- a/src/client/render/gui/MainMenu.cpp +++ b/src/client/render/gui/MainMenu.cpp @@ -1,4 +1,5 @@ #include "client/render/gui/MainMenu.h" +#include "client/render/gui/ServerGui.h" #include "client/Client.h" @@ -19,7 +20,12 @@ MainMenu::~MainMenu() { void MainMenu::Render() { if (m_Server != nullptr && !m_Server->IsRunning()) { - m_Server.reset(0); // destroying server if it stoped + m_Server.reset(); // destroying server if it stoped + m_ServerGui.reset(); + } + + if(m_Server != nullptr){ + m_ServerGui->Render(); } if (m_Client->IsConnected()) return; @@ -83,8 +89,10 @@ bool MainMenu::StartServer() { m_Server = std::make_unique(); m_Server->LoadMap(m_WorldFilePath); if (!m_Server->Start(m_ServerPort, false)) { + m_Server.reset(); return false; } + m_ServerGui = std::make_unique(m_Client, m_Server.get()); return true; } diff --git a/src/client/render/gui/ServerGui.cpp b/src/client/render/gui/ServerGui.cpp new file mode 100644 index 0000000..625b493 --- /dev/null +++ b/src/client/render/gui/ServerGui.cpp @@ -0,0 +1,27 @@ +#include "client/render/gui/ServerGui.h" + +#include "client/render/gui/imgui/imgui.h" + +namespace td { +namespace gui { + +ServerGui::ServerGui(client::Client* client, server::Server* server) : GuiWidget(client), m_Server(server) {} + + +void ServerGui::Render() { + ImGui::Begin("Integrated Server"); + ImGui::Text("Server TPS : %.1f", m_Server->GetTPS()); + ImGui::Text("Server MSPT : %i", (int)m_Server->GetMSPT()); + ImGui::Separator(); + if (ImGui::Button("Restart")) { + m_Server->Restart(); + } + ImGui::SameLine(); + if (ImGui::Button("Stop")) { + m_Server->Stop(); + } + ImGui::End(); +} + +} // namespace gui +} // namespace td