The logic for removing the world is working but when we send the map again the clients memory usage goes crazy.

This commit is contained in:
Jocke
2016-03-12 17:49:50 +01:00
parent 0c1a2d3160
commit c544f349fd
9 changed files with 64 additions and 12 deletions
+1
View File
@@ -33,6 +33,7 @@
#include "Network/EDisplayServerlist.h" #include "Network/EDisplayServerlist.h"
#include "Network/EConnectRequest.h" #include "Network/EConnectRequest.h"
#include "Network/EPlayerDisconnected.h" #include "Network/EPlayerDisconnected.h"
#include "Game/Events/EReset.h"
class Client : public Network class Client : public Network
{ {
+1
View File
@@ -26,6 +26,7 @@
#include "Network/EPlayerConnected.h" #include "Network/EPlayerConnected.h"
#include "Network/EKillDeath.h" #include "Network/EKillDeath.h"
#include "Core/EWin.h" #include "Core/EWin.h"
#include "Game/Events/EReset.h"
class Server : public Network class Server : public Network
{ {
@@ -1,5 +1,5 @@
#ifndef Restart_h__ #ifndef Reset_h__
#define Restart_h__ #define Reset_h__
#include "Core/EventBroker.h" #include "Core/EventBroker.h"
#include "Core/EntityWrapper.h" #include "Core/EntityWrapper.h"
@@ -7,7 +7,7 @@
namespace Events namespace Events
{ {
struct Restart : Event struct Reset : Event
{ {
}; };
@@ -9,6 +9,7 @@
#include "Engine/Collision/ETrigger.h" #include "Engine/Collision/ETrigger.h"
#include "Core/ECaptured.h" #include "Core/ECaptured.h"
#include "Core/EWin.h" #include "Core/EWin.h"
#include "Game/Events/EReset.h"
#include <tuple> #include <tuple>
#include <vector> #include <vector>
@@ -23,6 +24,7 @@ public:
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& capturePoint, double dt) override; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& capturePoint, double dt) override;
private: private:
void Init();
//methods which will take care of specific events //methods which will take care of specific events
EventRelay<CapturePointSystem, Events::TriggerTouch> m_ETriggerTouch; EventRelay<CapturePointSystem, Events::TriggerTouch> m_ETriggerTouch;
bool CapturePointSystem::OnTriggerTouch(const Events::TriggerTouch& e); bool CapturePointSystem::OnTriggerTouch(const Events::TriggerTouch& e);
@@ -30,6 +32,8 @@ private:
bool CapturePointSystem::OnTriggerLeave(const Events::TriggerLeave& e); bool CapturePointSystem::OnTriggerLeave(const Events::TriggerLeave& e);
EventRelay<CapturePointSystem, Events::Captured> m_ECaptured; EventRelay<CapturePointSystem, Events::Captured> m_ECaptured;
bool CapturePointSystem::OnCaptured(const Events::Captured& e); bool CapturePointSystem::OnCaptured(const Events::Captured& e);
EventRelay<CapturePointSystem, Events::Reset> m_EReset;
bool CapturePointSystem::OnReset(const Events::Reset& e);
void ChangeCapturePointModelsVisibility(EntityWrapper &capturePointModels, bool isOwner); void ChangeCapturePointModelsVisibility(EntityWrapper &capturePointModels, bool isOwner);
bool m_WinnerWasFound = false; bool m_WinnerWasFound = false;
@@ -4,6 +4,7 @@
#include "Core/System.h" #include "Core/System.h"
#include "Input/EInputCommand.h" #include "Input/EInputCommand.h"
#include "Network/EPlayerDisconnected.h" #include "Network/EPlayerDisconnected.h"
#include "Game/Events/EReset.h"
class SpectatorCameraSystem : public ImpureSystem class SpectatorCameraSystem : public ImpureSystem
{ {
@@ -15,11 +16,14 @@ public:
private: private:
int m_PickedTeam; int m_PickedTeam;
bool m_CamSetToTeamPick; bool m_CamSetToTeamPick;
void reset();
EventRelay<SpectatorCameraSystem, Events::InputCommand> m_EInputCommand; EventRelay<SpectatorCameraSystem, Events::InputCommand> m_EInputCommand;
bool OnInputCommand(const Events::InputCommand& e); bool OnInputCommand(const Events::InputCommand& e);
EventRelay<SpectatorCameraSystem, Events::PlayerDisconnected> m_EDisconnect; EventRelay<SpectatorCameraSystem, Events::PlayerDisconnected> m_EDisconnect;
bool OnDisconnect(const Events::PlayerDisconnected& e); bool OnDisconnect(const Events::PlayerDisconnected& e);
EventRelay<SpectatorCameraSystem, Events::Reset> m_EReset;
bool OnReset(const Events::Reset& e);
}; };
#endif #endif
+2 -1
View File
@@ -342,7 +342,8 @@ void Client::parseAmmoPickup(Packet & packet)
void Client::parseRemoveWorld(Packet & packet) void Client::parseRemoveWorld(Packet & packet)
{ {
removeWorld(); removeWorld();
Events::Reset e;
m_EventBroker->Publish(e);
} }
void Client::updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID) void Client::updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID)
+3
View File
@@ -545,9 +545,12 @@ bool Server::OnPlayerDeath(const Events::PlayerDeath& e)
bool Server::OnWin(const Events::Win & e) bool Server::OnWin(const Events::Win & e)
{ {
Events::Reset reset;
m_EventBroker->Publish(reset);
Packet removeMap(MessageType::RemoveWorld); Packet removeMap(MessageType::RemoveWorld);
reliableBroadcast(removeMap); reliableBroadcast(removeMap);
removeWorld(); removeWorld();
// Hardcoded for now.
auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/CP_Rocky2.xml"); auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/CP_Rocky2.xml");
entityFile->MergeInto(m_World); entityFile->MergeInto(m_World);
Packet newWorld(MessageType::Snapshot); Packet newWorld(MessageType::Snapshot);
+31 -4
View File
@@ -11,7 +11,25 @@ CapturePointSystem::CapturePointSystem(SystemParams params)
EVENT_SUBSCRIBE_MEMBER(m_ETriggerLeave, &CapturePointSystem::OnTriggerLeave); EVENT_SUBSCRIBE_MEMBER(m_ETriggerLeave, &CapturePointSystem::OnTriggerLeave);
EVENT_SUBSCRIBE_MEMBER(m_ECaptured, &CapturePointSystem::OnCaptured); EVENT_SUBSCRIBE_MEMBER(m_ECaptured, &CapturePointSystem::OnCaptured);
} }
EVENT_SUBSCRIBE_MEMBER(m_EReset, &CapturePointSystem::OnReset);
Init();
}
void CapturePointSystem::Init()
{
m_WinnerWasFound = false;
//need to track these variables for the captureSystem to work as per design!
m_RedTeamNextPossibleCapturePoint = m_NotACapturePoint;
m_BlueTeamNextPossibleCapturePoint = m_NotACapturePoint;
m_RedTeamHomeCapturePoint = m_NotACapturePoint;
m_BlueTeamHomeCapturePoint = m_NotACapturePoint;
m_NumberOfCapturePoints = 0;
m_ResetTimers = false;
m_RecentlyCapturedNeedNextCapturePointNow = false;
m_CapturePointNumberToEntityMap.clear();
//vectors which will keep track of enter/leave changes
m_ETriggerTouchVector.clear();
m_ETriggerLeaveVector.clear();
} }
//here all capturepoints will update their component //here all capturepoints will update their component
@@ -24,6 +42,9 @@ void CapturePointSystem::UpdateComponent(EntityWrapper& capturePointEntity, Comp
if (m_WinnerWasFound) { if (m_WinnerWasFound) {
return; return;
} }
if (!capturePointEntity.Valid()) {
return;
}
const int capturePointNumber = cCapturePoint["CapturePointNumber"]; const int capturePointNumber = cCapturePoint["CapturePointNumber"];
const bool hasTeamComponent = capturePointEntity.HasComponent("Team"); const bool hasTeamComponent = capturePointEntity.HasComponent("Team");
@@ -60,7 +81,7 @@ void CapturePointSystem::UpdateComponent(EntityWrapper& capturePointEntity, Comp
} }
//if we havent received all capturepoints yet, just return //if we havent received all capturepoints yet, just return
if (m_NumberOfCapturePoints == 0 || m_NumberOfCapturePoints != m_CapturePointNumberToEntityMap.size()) { if (m_NumberOfCapturePoints == 0 || m_NumberOfCapturePoints > m_CapturePointNumberToEntityMap.size()) {
m_CapturePointNumberToEntityMap.insert(std::make_pair(capturePointNumber, capturePointEntity)); m_CapturePointNumberToEntityMap.insert(std::make_pair(capturePointNumber, capturePointEntity));
return; return;
} }
@@ -232,10 +253,10 @@ void CapturePointSystem::UpdateComponent(EntityWrapper& capturePointEntity, Comp
} }
void CapturePointSystem::ChangeCapturePointModelsVisibility(EntityWrapper &capturePointModels, bool isOwner) { void CapturePointSystem::ChangeCapturePointModelsVisibility(EntityWrapper &capturePointModels, bool isOwner)
{
(bool&)capturePointModels["Model"]["Visible"] = isOwner; (bool&)capturePointModels["Model"]["Visible"] = isOwner;
for (auto& capModel : capturePointModels.ChildrenWithComponent("Transform")) for (auto& capModel : capturePointModels.ChildrenWithComponent("Transform")) {
{
if (capModel.HasComponent("Model")) { if (capModel.HasComponent("Model")) {
(bool&)capModel["Model"]["Visible"] = isOwner; (bool&)capModel["Model"]["Visible"] = isOwner;
} }
@@ -269,3 +290,9 @@ bool CapturePointSystem::OnCaptured(const Events::Captured& e)
m_ResetTimers = true; m_ResetTimers = true;
return true; return true;
} }
bool CapturePointSystem::OnReset(const Events::Reset& e)
{
Init();
return true;
}
+15 -4
View File
@@ -27,6 +27,14 @@ void SpectatorCameraSystem::Update(double dt)
} }
} }
void SpectatorCameraSystem::reset()
{
m_CamSetToTeamPick = false;
// They will also be set to menu, so unlock mouse just in case they were in game with locked mouse.
Events::UnlockMouse unlock;
m_EventBroker->Publish(unlock);
}
bool SpectatorCameraSystem::OnInputCommand(const Events::InputCommand& e) bool SpectatorCameraSystem::OnInputCommand(const Events::InputCommand& e)
{ {
// Only the client should do this, and only if player is not spawned. // Only the client should do this, and only if player is not spawned.
@@ -95,10 +103,13 @@ bool SpectatorCameraSystem::OnDisconnect(const Events::PlayerDisconnected& e)
// If local player gets disconnected, they should be set to // If local player gets disconnected, they should be set to
// the spectator camera next time a map loads that has one. // the spectator camera next time a map loads that has one.
if (e.Entity == LocalPlayer.ID) { if (e.Entity == LocalPlayer.ID) {
m_CamSetToTeamPick = false; reset();
// They will also be set to menu, so unlock mouse just in case they were in game with locked mouse.
Events::UnlockMouse unlock;
m_EventBroker->Publish(unlock);
} }
return true; return true;
} }
bool SpectatorCameraSystem::OnReset(const Events::Reset & e)
{
reset();
return true;
}