diff --git a/include/Engine/Network/EBecomeServer.h b/include/Engine/Network/EBecomeServer.h deleted file mode 100644 index 4a7be0c3..00000000 --- a/include/Engine/Network/EBecomeServer.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef Events_BecomeServer_h__ -#define Events_BecomeServer_h__ - -#include "Core/EventBroker.h" - -namespace Events -{ - -struct BecomeServer : public Event -{ }; - -} - -#endif diff --git a/include/Engine/Network/EBecomeServerOrClient.h b/include/Engine/Network/EBecomeServerOrClient.h new file mode 100644 index 00000000..79fc4447 --- /dev/null +++ b/include/Engine/Network/EBecomeServerOrClient.h @@ -0,0 +1,15 @@ +#ifndef Events_BecomeServerOrClient_h__ +#define Events_BecomeServerOrClient_h__ + +#include "Core/EventBroker.h" + +namespace Events +{ + +struct BecomeServer : public Event { }; + +struct BecomeClient : public Event { }; + +} + +#endif diff --git a/include/Game/Game.h b/include/Game/Game.h index acd62d43..31f995f6 100644 --- a/include/Game/Game.h +++ b/include/Game/Game.h @@ -29,7 +29,7 @@ #include "Network/Network.h" #include "Network/Server.h" #include "Network/Client.h" -#include "Network/EBecomeServer.h" +#include "Network/EBecomeServerOrClient.h" // Sound #include "Sound/SoundManager.h" @@ -74,6 +74,8 @@ private: EventRelay m_EBecomeServer; bool OnBecomeServer(const Events::BecomeServer& e); + EventRelay m_EBecomeClient; + bool OnBecomeClient(const Events::BecomeClient& e); }; #endif diff --git a/include/Game/Systems/MainMenuSystem.h b/include/Game/Systems/MainMenuSystem.h index f6708525..c3a8fef2 100644 --- a/include/Game/Systems/MainMenuSystem.h +++ b/include/Game/Systems/MainMenuSystem.h @@ -14,7 +14,7 @@ #include "Input/EInputCommand.h" #include "Network/ESearchForServers.h" #include "Network/EConnectRequest.h" -#include "Network/EBecomeServer.h" +#include "Network/EBecomeServerOrClient.h" class MainMenuSystem : public ImpureSystem diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index e4915fd5..f5c84d3c 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -65,6 +65,8 @@ Game::Game(int argc, char* argv[]) // Create the core event broker m_EventBroker = new EventBroker(); + EVENT_SUBSCRIBE_MEMBER(m_EBecomeServer, &Game::OnBecomeServer); + EVENT_SUBSCRIBE_MEMBER(m_EBecomeClient, &Game::OnBecomeClient); // Create the renderer m_Renderer = new Renderer(m_EventBroker, m_Config); @@ -75,7 +77,7 @@ Game::Game(int argc, char* argv[]) 0, m_Config->Get("Video.Width", 1280), m_Config->Get("Video.Height", 720) - )); + )); m_Renderer->Initialize(); //m_Renderer->Camera()->SetFOV(glm::radians(m_Config->Get("Video.FOV", 90.f))); m_RenderFrame = new RenderFrame(); @@ -164,8 +166,6 @@ Game::Game(int argc, char* argv[]) m_SystemPipeline->AddSystem(updateOrderLevel, m_Renderer, m_RenderFrame); m_LastTime = glfwGetTime(); - EVENT_SUBSCRIBE_MEMBER(m_EBecomeServer, &Game::OnBecomeServer); - } Game::~Game() @@ -175,11 +175,12 @@ Game::~Game() delete m_OctreeCollision; delete m_OctreeTrigger; delete m_SoundManager; + m_EventBroker->Unsubscribe(m_EBecomeServer); + m_EventBroker->Unsubscribe(m_EBecomeClient); if (m_NetworkClient != nullptr) { delete m_NetworkClient; } if (m_NetworkServer != nullptr) { - m_EventBroker->Unsubscribe(m_EBecomeServer); delete m_NetworkServer; } delete m_World; @@ -276,8 +277,7 @@ int Game::parseArgs(int argc, char* argv[]) bool Game::OnBecomeServer(const Events::BecomeServer& e) { - //// Initialize network - //if (m_Config->Get("Networking.StartNetwork", false)) { + // if (m_IsServer) { // m_NetworkServer = new Server(m_World, m_EventBroker, m_NetworkPort); // m_Renderer->SetWindowTitle(m_Renderer->WindowTitle() + " SERVER"); @@ -286,14 +286,28 @@ bool Game::OnBecomeServer(const Events::BecomeServer& e) // m_NetworkClient->Connect(m_NetworkAddress, m_NetworkPort); // m_Renderer->SetWindowTitle(m_Renderer->WindowTitle() + " CLIENT"); // } - //} else { - // // If network is disabled, pretend we're a server - // m_IsClient = true; - // m_IsServer = true; - //} - //printf("Event received LOL\n"); - //return false; + + if (m_NetworkServer != nullptr) { + delete m_NetworkServer; + } + if (m_NetworkClient != nullptr) { + delete m_NetworkClient; + } m_NetworkServer = new Server(m_World, m_EventBroker, m_NetworkPort); m_Renderer->SetWindowTitle(m_Renderer->WindowTitle() + " SERVER"); return true; } + +bool Game::OnBecomeClient(const Events::BecomeClient& e) +{ + if (m_NetworkServer != nullptr) { + delete m_NetworkServer; + } + if (m_NetworkClient != nullptr) { + delete m_NetworkClient; + } + m_NetworkClient = new Client(m_World, m_EventBroker, std::make_unique(m_EventBroker)); + m_NetworkClient->Connect(m_NetworkAddress, m_NetworkPort); + m_Renderer->SetWindowTitle(m_Renderer->WindowTitle() + " CLIENT"); + return true; +} diff --git a/src/Game/Systems/MainMenuSystem.cpp b/src/Game/Systems/MainMenuSystem.cpp index 49c97030..f2bf2853 100644 --- a/src/Game/Systems/MainMenuSystem.cpp +++ b/src/Game/Systems/MainMenuSystem.cpp @@ -50,6 +50,7 @@ bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e) return true; } if (e.Command == "Play" && e.Value == 1) { + m_EventBroker->Publish(Events::BecomeClient()); auto menus = m_World->GetComponents("Menu"); if (menus == nullptr) { return 0;