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:
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user