better removal of players

This commit is contained in:
2024-08-03 15:06:33 +02:00
parent 2065ea8334
commit 282ddac80c
7 changed files with 55 additions and 7 deletions

View File

@@ -0,0 +1,9 @@
#pragma once
#include <blitz/common/Types.h>
namespace blitz {
struct PlayerRemoveComponent {};
} // namespace blitz

View File

@@ -0,0 +1,18 @@
#pragma once
#include <Nazara/Core/Time.hpp>
#include <blitz/common/Types.h>
namespace blitz {
class RemovePlayersSystem {
public:
RemovePlayersSystem(entt::registry&, EnttWorld& a_World);
void Update(Nz::Time elapsedTime);
private:
EnttWorld& m_World;
};
} // namespace blitz

View File

@@ -1,7 +1,6 @@
#pragma once
#include <Nazara/Core/Time.hpp>
#include <entt/entity/registry.hpp>
#include <blitz/common/Types.h>
namespace blitz {

View File

@@ -0,0 +1,19 @@
#include <blitz/systems/RemovePlayersSystem.h>
#include <blitz/components/PlayerRemove.h>
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<PlayerRemoveComponent>();
registry.destroy(invalidPlayers.begin(), invalidPlayers.end());
}
} // namespace blitz

View File

@@ -1,5 +1,7 @@
#include <client/handlers/PlayerLeaveHandler.h>
#include <blitz/components/PlayerRemove.h>
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<PlayerInfoComponent>().each()) {
if (playerInfo.m_PlayerId == a_PlayerLeave.m_PlayerId) {
playerLeft = player;
world->GetRegistry().emplace<PlayerRemoveComponent>(player);
break;
}
}
world->GetRegistry().destroy(playerLeft);
}
PlayerLeaveHandler::~PlayerLeaveHandler() {}

View File

@@ -6,6 +6,7 @@
#include <server/handlers/KeepAliveHandler.h>
#include <server/handlers/PlayerLoginHandler.h>
#include <blitz/systems/RemovePlayersSystem.h>
#include <server/systems/DisconnectSystem.h>
#include <server/systems/KeepAliveSystem.h>
@@ -50,6 +51,7 @@ void Server::RegisterSystems() {
AtomicEnttWorld world = m_World;
world->AddSystem<KeepAliveSystem>(m_World);
world->AddSystem<DisconectSystem>(m_World, *this);
world->AddSystem<RemovePlayersSystem>(m_World);
auto counter = world->CreateEntity();
counter.emplace<ServerIdCounterComponent>(0);

View File

@@ -2,6 +2,7 @@
#include <server/components/Disconnect.h>
#include <server/components/EnetConnection.h>
#include <blitz/components/PlayerRemove.h>
#include <server/Server.h>
@@ -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<PlayerRemoveComponent>(entity);
}
}
} // namespace server