true atomic EnttWorld

This commit is contained in:
2024-07-23 01:10:20 +02:00
parent 392eaeab83
commit 89d5ad5f54
16 changed files with 61 additions and 35 deletions

View File

@@ -8,29 +8,33 @@
namespace blitz {
namespace server {
DisconectSystem::DisconectSystem(entt::registry& a_Registry, Server& a_Server) : m_Registry(a_Registry), m_Server(a_Server) {}
DisconectSystem::DisconectSystem(entt::registry&, EnttWorld& a_World, Server& a_Server) : m_World(a_World), m_Server(a_Server) {}
void DisconectSystem::Update(Nz::Time elapsedTime) {
auto disconnects = m_Registry.view<DisconnectComponent>();
AtomicEnttWorld world = m_World;
entt::registry& registry = world->GetRegistry();
auto disconnects = registry.view<DisconnectComponent>();
// broadcast player leave
for (auto entity : disconnects) {
auto* player = m_Registry.try_get<PlayerInfoComponent>(entity);
auto* player = registry.try_get<PlayerInfoComponent>(entity);
if (player) {
for (auto [entity, connection] : m_Registry.view<EnetConnectionComponent>().each()) {
for (auto [entity, connection] : registry.view<EnetConnectionComponent>().each()) {
connection.m_Connection->SendPlayerLeave({player->m_PlayerId});
}
}
}
// close connections
m_Registry.view<EnetConnectionComponent, DisconnectComponent>().each(
registry.view<EnetConnectionComponent, DisconnectComponent>().each(
[this](auto entity, EnetConnectionComponent& connection, DisconnectComponent disconnect) {
m_Server.CloseConnection(connection.m_Connection->GetPeerId());
});
// remove the entities
m_Registry.destroy(disconnects.begin(), disconnects.end());
registry.destroy(disconnects.begin(), disconnects.end());
}
} // namespace server