Skip to content

Commit f37204c

Browse files
committed
Server: Fix issues with EnttObserver
1 parent a9f0a88 commit f37204c

4 files changed

Lines changed: 29 additions & 22 deletions

File tree

include/ServerLib/Systems/EnvironmentProxySystem.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ namespace tsom
3737

3838
void AddEnvironmentRecursively(ServerPlayer* player);
3939

40+
void Update(Nz::Time /*elapsedTime*/);
41+
4042
EnvironmentProxySystem& operator=(const EnvironmentProxySystem&) = delete;
4143
EnvironmentProxySystem& operator=(EnvironmentProxySystem&&) = delete;
4244

src/ServerLib/SessionVisibilityHandler.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace tsom
1717
{
1818
bool SessionVisibilityHandler::CreateChunk(entt::handle entity, Chunk& chunk)
1919
{
20-
assert(m_chunkNetworkMaps.contains(entity));
20+
NazaraAssert(m_chunkNetworkMaps.contains(entity));
2121
auto& chunkNetworkIndices = m_chunkNetworkMaps[entity];
2222

2323
ChunkIndices chunkIndices = chunk.GetIndices();
@@ -42,7 +42,7 @@ namespace tsom
4242
m_freeChunkIds.Set(chunkIndex, false);
4343
m_newlyVisibleChunk.UnboundedSet(chunkIndex);
4444

45-
assert(!chunkNetworkIndices.contains(chunkIndices));
45+
NazaraAssert(!chunkNetworkIndices.contains(chunkIndices));
4646
chunkNetworkIndices.emplace(chunkIndices, Nz::SafeCaster(chunkIndex));
4747

4848
if (chunkIndex >= m_visibleChunks.size())
@@ -59,13 +59,13 @@ namespace tsom
5959

6060
void SessionVisibilityHandler::CreateEntity(entt::handle entity, CreateEntityData entityData)
6161
{
62-
assert(!m_entityIndices.contains(entity));
62+
NazaraAssert(!m_entityIndices.contains(entity));
6363

64-
assert(!m_deletedEntities.contains(entity)); //< resurrecting entities shouldn't be possible
64+
NazaraAssert(!m_deletedEntities.contains(entity)); //< resurrecting entities shouldn't be possible
6565

6666
if (entity.try_get<PlanetComponent>() || entity.try_get<ShipComponent>())
6767
{
68-
assert(!m_chunkNetworkMaps.contains(entity));
68+
NazaraAssert(!m_chunkNetworkMaps.contains(entity));
6969
m_chunkNetworkMaps.emplace(entity, ChunkNetworkMap{});
7070
}
7171

src/ServerLib/Systems/EnvironmentProxySystem.cpp

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,6 @@ namespace tsom
1515
m_observer(registry),
1616
m_registry(registry)
1717
{
18-
m_observer.OnEntityAdded.Connect([&](entt::entity entity)
19-
{
20-
ServerEnvironment* environment = ServerEnvironment::GetEnvironment(m_registry);
21-
22-
auto& envProxy = m_registry.get<EnvironmentProxyComponent>(entity);
23-
environment->ForEachPlayer([&](ServerPlayer& player)
24-
{
25-
if (player.IsInEnvironment(envProxy.targetEnvironment))
26-
return;
27-
28-
player.AddToEnvironment(envProxy.targetEnvironment, entt::handle(m_registry, entity));
29-
30-
auto& envProxySystem = envProxy.targetEnvironment->GetWorld().GetSystem<EnvironmentProxySystem>();
31-
envProxySystem.AddEnvironmentRecursively(&player);
32-
});
33-
});
3418
}
3519

3620
void EnvironmentProxySystem::AddEnvironmentRecursively(ServerPlayer* player)
@@ -50,4 +34,25 @@ namespace tsom
5034
envProxySystem.AddEnvironmentRecursively(player);
5135
}
5236
}
37+
38+
void EnvironmentProxySystem::Update(Nz::Time /*elapsedTime*/)
39+
{
40+
for (entt::entity entity : m_observer)
41+
{
42+
ServerEnvironment* environment = ServerEnvironment::GetEnvironment(m_registry);
43+
44+
auto& envProxy = m_registry.get<EnvironmentProxyComponent>(entity);
45+
environment->ForEachPlayer([&](ServerPlayer& player)
46+
{
47+
if (player.IsInEnvironment(envProxy.targetEnvironment))
48+
return;
49+
50+
player.AddToEnvironment(envProxy.targetEnvironment, entt::handle(m_registry, entity));
51+
52+
auto& envProxySystem = envProxy.targetEnvironment->GetWorld().GetSystem<EnvironmentProxySystem>();
53+
envProxySystem.AddEnvironmentRecursively(&player);
54+
});
55+
}
56+
m_observer.Clear();
57+
}
5358
}

src/ServerLib/Systems/NetworkedEntitiesSystem.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ namespace tsom
148148

149149
auto& entityNetwork = m_registry.get<NetworkedComponent>(entity);
150150
if (!entityNetwork.ShouldSignalCreation())
151-
return;
151+
continue;
152152

153153
SessionVisibilityHandler::CreateEntityData createData = BuildCreateEntityData(entity);
154154
ForEachVisibility([&](SessionVisibilityHandler& visibility)

0 commit comments

Comments
 (0)