From 282ddac80c34953114539aae19af990b07cf93cb Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Sat, 3 Aug 2024 15:06:33 +0200 Subject: [PATCH] better removal of players --- include/blitz/components/PlayerRemove.h | 9 +++++++++ include/blitz/systems/RemovePlayersSystem.h | 18 ++++++++++++++++++ include/server/systems/DisconnectSystem.h | 1 - src/blitz/systems/RemovePlayersSystem.cpp | 19 +++++++++++++++++++ src/client/handlers/PlayerLeaveHandler.cpp | 8 +++----- src/server/Server.cpp | 2 ++ src/server/systems/DisconnectSystem.cpp | 5 ++++- 7 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 include/blitz/components/PlayerRemove.h create mode 100644 include/blitz/systems/RemovePlayersSystem.h create mode 100644 src/blitz/systems/RemovePlayersSystem.cpp diff --git a/include/blitz/components/PlayerRemove.h b/include/blitz/components/PlayerRemove.h new file mode 100644 index 0000000..e899bfa --- /dev/null +++ b/include/blitz/components/PlayerRemove.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +namespace blitz { + +struct PlayerRemoveComponent {}; + +} // namespace blitz diff --git a/include/blitz/systems/RemovePlayersSystem.h b/include/blitz/systems/RemovePlayersSystem.h new file mode 100644 index 0000000..b4135e8 --- /dev/null +++ b/include/blitz/systems/RemovePlayersSystem.h @@ -0,0 +1,18 @@ +#pragma once + +#include +#include + +namespace blitz { + +class RemovePlayersSystem { + public: + RemovePlayersSystem(entt::registry&, EnttWorld& a_World); + + void Update(Nz::Time elapsedTime); + + private: + EnttWorld& m_World; +}; + +} // namespace blitz diff --git a/include/server/systems/DisconnectSystem.h b/include/server/systems/DisconnectSystem.h index da5c055..908a222 100644 --- a/include/server/systems/DisconnectSystem.h +++ b/include/server/systems/DisconnectSystem.h @@ -1,7 +1,6 @@ #pragma once #include -#include #include namespace blitz { diff --git a/src/blitz/systems/RemovePlayersSystem.cpp b/src/blitz/systems/RemovePlayersSystem.cpp new file mode 100644 index 0000000..a3e6365 --- /dev/null +++ b/src/blitz/systems/RemovePlayersSystem.cpp @@ -0,0 +1,19 @@ +#include + +#include + +namespace blitz { + +RemovePlayersSystem::RemovePlayersSystem(entt::registry&, EnttWorld& a_World) : m_World(a_World) {} + +void RemovePlayersSystem::Update(Nz::Time /*elapsedTime*/) { + AtomicEnttWorld world = m_World; + + entt::registry& registry = world->GetRegistry(); + + auto invalidPlayers = registry.view(); + + registry.destroy(invalidPlayers.begin(), invalidPlayers.end()); +} + +} // namespace blitz diff --git a/src/client/handlers/PlayerLeaveHandler.cpp b/src/client/handlers/PlayerLeaveHandler.cpp index e0fe1c9..7ba5658 100644 --- a/src/client/handlers/PlayerLeaveHandler.cpp +++ b/src/client/handlers/PlayerLeaveHandler.cpp @@ -1,5 +1,7 @@ #include +#include + namespace blitz { namespace client { @@ -11,16 +13,12 @@ PlayerLeaveHandler::PlayerLeaveHandler(network::EnetConnection& a_Connection, En void PlayerLeaveHandler::Handle(const protocol::data::PlayerLeave& a_PlayerLeave) { AtomicEnttWorld world = m_World; - entt::entity playerLeft; - for (auto [player, playerInfo] : world->GetRegistry().view().each()) { if (playerInfo.m_PlayerId == a_PlayerLeave.m_PlayerId) { - playerLeft = player; + world->GetRegistry().emplace(player); break; } } - - world->GetRegistry().destroy(playerLeft); } PlayerLeaveHandler::~PlayerLeaveHandler() {} diff --git a/src/server/Server.cpp b/src/server/Server.cpp index 7c9fa39..63eab96 100644 --- a/src/server/Server.cpp +++ b/src/server/Server.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include @@ -50,6 +51,7 @@ void Server::RegisterSystems() { AtomicEnttWorld world = m_World; world->AddSystem(m_World); world->AddSystem(m_World, *this); + world->AddSystem(m_World); auto counter = world->CreateEntity(); counter.emplace(0); diff --git a/src/server/systems/DisconnectSystem.cpp b/src/server/systems/DisconnectSystem.cpp index ab984fb..f85e2be 100644 --- a/src/server/systems/DisconnectSystem.cpp +++ b/src/server/systems/DisconnectSystem.cpp @@ -2,6 +2,7 @@ #include #include +#include #include @@ -38,7 +39,9 @@ void DisconectSystem::Update(Nz::Time elapsedTime) { }); // remove the entities - registry.destroy(disconnects.begin(), disconnects.end()); + for (auto entity : disconnects) { + registry.emplace(entity); + } } } // namespace server