From 74d9bae8968d2775b87c1bb49016e49c5188bbed Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Fri, 22 Jan 2016 17:34:57 +0100 Subject: [PATCH] Added conditional spawning based on whether the running instance is a server or not --- include/Game/Systems/PlayerSpawnSystem.h | 8 +++++-- src/Game/Systems/PlayerSpawnSystem.cpp | 29 ++++++++++++++++++------ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/include/Game/Systems/PlayerSpawnSystem.h b/include/Game/Systems/PlayerSpawnSystem.h index 9e9ce0be..6c0f6ce3 100644 --- a/include/Game/Systems/PlayerSpawnSystem.h +++ b/include/Game/Systems/PlayerSpawnSystem.h @@ -4,6 +4,7 @@ #include "Events/ESpawnerSpawn.h" #include "Events/EPlayerSpawned.h" #include "Rendering/ESetCamera.h" +#include "Core/ConfigFile.h" class PlayerSpawnSystem : public ImpureSystem { @@ -19,8 +20,11 @@ private: ComponentInfo::EnumType Team; }; + bool m_NetworkEnabled = false; + std::vector m_SpawnRequests; + EventRelay m_OnInputCommand; bool OnInputCommand(const Events::InputCommand& e); - - std::vector m_SpawnRequests; + EventRelay m_OnPlayerSpawnerd; + bool OnPlayerSpawned(Events::PlayerSpawned& e); }; \ No newline at end of file diff --git a/src/Game/Systems/PlayerSpawnSystem.cpp b/src/Game/Systems/PlayerSpawnSystem.cpp index 0763fa9c..f18808cc 100644 --- a/src/Game/Systems/PlayerSpawnSystem.cpp +++ b/src/Game/Systems/PlayerSpawnSystem.cpp @@ -4,6 +4,8 @@ PlayerSpawnSystem::PlayerSpawnSystem(World* m_World, EventBroker* eventBroker) : System(m_World, eventBroker) { EVENT_SUBSCRIBE_MEMBER(m_OnInputCommand, &PlayerSpawnSystem::OnInputCommand); + EVENT_SUBSCRIBE_MEMBER(m_OnPlayerSpawnerd, &PlayerSpawnSystem::OnPlayerSpawned); + m_NetworkEnabled = ResourceManager::Load("Config.ini")->Get("Networking.StartNetwork", false); } void PlayerSpawnSystem::Update(double dt) @@ -39,13 +41,6 @@ void PlayerSpawnSystem::Update(double dt) e.Spawner = spawner; m_EventBroker->Publish(e); - // Set the camera to the correct entity - EntityWrapper cameraEntity = player.FirstChildByName("Camera"); - if (cameraEntity.Valid()) { - Events::SetCamera e; - e.CameraEntity = cameraEntity; - m_EventBroker->Publish(e); - } } } m_SpawnRequests.clear(); @@ -57,6 +52,12 @@ bool PlayerSpawnSystem::OnInputCommand(const Events::InputCommand& e) return false; } + // Team picks should be processed ONLY server-side! + // Don't make a spawn request if PlayerID is -1, i.e. we're the client. + if (e.PlayerID == -1 && m_NetworkEnabled) { + return false; + } + if (e.Value != 0) { SpawnRequest req; req.PlayerID = e.PlayerID; @@ -67,3 +68,17 @@ bool PlayerSpawnSystem::OnInputCommand(const Events::InputCommand& e) return true; } +bool PlayerSpawnSystem::OnPlayerSpawned(Events::PlayerSpawned& e) +{ + // When a player is actually spawned (since the actual spawning is handled on the server) + + // Set the camera to the correct entity + EntityWrapper cameraEntity = e.Player.FirstChildByName("Camera"); + if (cameraEntity.Valid()) { + Events::SetCamera e; + e.CameraEntity = cameraEntity; + m_EventBroker->Publish(e); + } + + return true; +} \ No newline at end of file