diff --git a/include/Game/Systems/MainMenuSystem.h b/include/Game/Systems/MainMenuSystem.h index 2e13b557..c62e98c5 100644 --- a/include/Game/Systems/MainMenuSystem.h +++ b/include/Game/Systems/MainMenuSystem.h @@ -12,6 +12,7 @@ #include "GUI/EButtonPressed.h" #include "GUI/EButtonReleased.h" #include "Input/EInputCommand.h" +#include "Network/ESearchForServers.h" class MainMenuSystem : public ImpureSystem diff --git a/include/Game/Systems/ServerListSystem.h b/include/Game/Systems/ServerListSystem.h index 6fbb954d..014c8881 100644 --- a/include/Game/Systems/ServerListSystem.h +++ b/include/Game/Systems/ServerListSystem.h @@ -6,8 +6,10 @@ #include "Core/ResourceManager.h" #include "Core/Event.h" #include "Systems/SpawnerSystem.h" +#include "Core/EventBroker.h" #include "Network/ESearchForServers.h" +#include "Network/EDisplayServerlist.h" class ServerListSystem : public PureSystem { @@ -20,8 +22,8 @@ public: private: IRenderer* m_Renderer; - //EventRelay m_EServerListRecieved; - //bool OnServerListRecieved(const Events::SomeEventLol& e) + EventRelay m_EServerListRecieved; + bool OnServerListRecieved(const Events::DisplayServerlist& e); }; #endif \ No newline at end of file diff --git a/resources/Schema/Components/ServerList.xml b/resources/Schema/Components/ServerList.xml index d3571d07..e4dbfcad 100644 --- a/resources/Schema/Components/ServerList.xml +++ b/resources/Schema/Components/ServerList.xml @@ -1,6 +1,6 @@ - + 0 0 - \ No newline at end of file + \ No newline at end of file diff --git a/resources/Schema/Entities/ServerIdentity.xml b/resources/Schema/Entities/ServerIdentity.xml index ca803c34..5e94b7b5 100644 --- a/resources/Schema/Entities/ServerIdentity.xml +++ b/resources/Schema/Entities/ServerIdentity.xml @@ -23,7 +23,7 @@ IP - + @@ -44,7 +44,7 @@ Port - + @@ -64,7 +64,9 @@ ServerIdentity ServerName - + + + @@ -84,7 +86,7 @@ PlayersConnected - + diff --git a/resources/Schema/Entities/ServerList.xml b/resources/Schema/Entities/ServerList.xml index 90773f90..f3a7da68 100644 --- a/resources/Schema/Entities/ServerList.xml +++ b/resources/Schema/Entities/ServerList.xml @@ -2,7 +2,9 @@ - + + + @@ -10,10 +12,23 @@ - + - + + + + + Schema/Entities/ServerIdentity.xml + + + + + + + + + @@ -38,6 +53,10 @@ + + RefreshServerList + 1 + diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index a40b13c6..81d6392f 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -37,6 +37,7 @@ #include "Game/Systems/ScoreScreenSystem.h" #include "GUI/ButtonSystem.h" #include "Game/Systems/MainMenuSystem.h" +#include "Game/Systems/ServerListSystem.h" Game::Game(int argc, char* argv[]) @@ -149,6 +150,7 @@ Game::Game(int argc, char* argv[]) m_SystemPipeline->AddSystem(updateOrderLevel, m_Renderer); m_SystemPipeline->AddSystem(updateOrderLevel); m_SystemPipeline->AddSystem(updateOrderLevel); + m_SystemPipeline->AddSystem(updateOrderLevel, m_Renderer); // Populate Octree with collidables ++updateOrderLevel; m_SystemPipeline->AddSystem(updateOrderLevel, m_OctreeCollision, "Collidable"); diff --git a/src/Game/Systems/MainMenuSystem.cpp b/src/Game/Systems/MainMenuSystem.cpp index ce95e280..0540485f 100644 --- a/src/Game/Systems/MainMenuSystem.cpp +++ b/src/Game/Systems/MainMenuSystem.cpp @@ -71,6 +71,8 @@ bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e) return 0; } m_OpenSubMenu = SpawnerSystem::Spawn(serverListSpawner, serverListSpawner); + Events::SearchForServers event; + m_EventBroker->Publish(event); break; } @@ -86,15 +88,19 @@ bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e) return 0; } m_OpenSubMenu = SpawnerSystem::Spawn(serverListSpawner, serverListSpawner); + Events::SearchForServers event; + m_EventBroker->Publish(event); + break; } - - } else { //Serverlist submenu is open, close it. printf("\n\nMenuShit\n\n"); m_World->DeleteEntity(m_OpenSubMenu.ID); m_OpenSubMenu = EntityWrapper::Invalid; } + } else if (e.Command == "RefreshServerList" && e.Value == 1){ + Events::SearchForServers event; + m_EventBroker->Publish(event); } return true; } \ No newline at end of file diff --git a/src/Game/Systems/ServerListSystem.cpp b/src/Game/Systems/ServerListSystem.cpp index 6b3efccf..f2813b64 100644 --- a/src/Game/Systems/ServerListSystem.cpp +++ b/src/Game/Systems/ServerListSystem.cpp @@ -5,7 +5,7 @@ ServerListSystem::ServerListSystem(SystemParams params, IRenderer* renderer) , PureSystem("ServerList") , m_Renderer(renderer) { - //Subscribe to OnServerListRecieved + EVENT_SUBSCRIBE_MEMBER(m_EServerListRecieved, &ServerListSystem::OnServerListRecieved); } void ServerListSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cServerList, double dt) @@ -15,6 +15,39 @@ void ServerListSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& void ServerListSystem::RefreshList() { - //Send out request for a server list. + Events::SearchForServers event; + m_EventBroker->Publish(event); } + +bool ServerListSystem::OnServerListRecieved(const Events::DisplayServerlist& e) +{ + if (e.Serverlist.size() == 0) { + return 1; + } + auto serverLists = m_World->GetComponents("ServerList"); + if (serverLists == nullptr) + return 1; + for (auto& cServerList : *serverLists) { + EntityWrapper serverListEntity = EntityWrapper(m_World, cServerList.EntityID); + EntityWrapper identitySpawner = serverListEntity.FirstChildByName("ServerIdentitySpawner"); + identitySpawner.DeleteChildren(); + + (int&)cServerList["TotalIdentities"] = (int)e.Serverlist.size(); + for (int i = 0; i < e.Serverlist.size(); i++) { + //Create Identities for each server and place them on the right position. + EntityWrapper newIdentity = SpawnerSystem::Spawn(identitySpawner, identitySpawner); + + glm::vec3 offset = (glm::vec3)serverListEntity["ServerList"]["Offset"]; + (glm::vec3&)newIdentity["Transform"]["Position"] = offset * (float)i; + + auto& cIdentity = newIdentity["ServerIdentity"]; + (std::string&)cIdentity["IP"] = e.Serverlist[i].Address; + (std::string&)cIdentity["ServerName"] = e.Serverlist[i].Name; + (int&)cIdentity["Port"] = e.Serverlist[i].Port; + (int&)cIdentity["PlayersConnected"] = e.Serverlist[i].PlayersConnected; + } + } + + return 1; +}