From 42b91e8dc22d6c3238ca375efb8542997a56ca56 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sun, 18 Jun 2023 00:02:40 +0300 Subject: [PATCH] Send spawns of newly-created entities in deferred_tick Spawn info won't have been set in the component_create event for the zygote. --- source/game/replicator.cpp | 13 +++++++++++-- source/game/replicator.h | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/source/game/replicator.cpp b/source/game/replicator.cpp index a24e629..64769e7 100644 --- a/source/game/replicator.cpp +++ b/source/game/replicator.cpp @@ -42,6 +42,16 @@ void Replicator::add_target_player(unsigned id) send_spawn(e, id); } +void Replicator::deferred_tick() +{ + for(ReplicatedEntity &e: entities) + if(!e.visible_to_players) + { + send_spawn(e, -1); + e.visible_to_players = true; + } +} + void Replicator::component_created(const Events::ComponentCreated &event) { if(Handle zygote = dynamic_handle_cast(event.component)) @@ -49,8 +59,7 @@ void Replicator::component_created(const Events::ComponentCreated &event) Handle entity = zygote->get_entity(); Handle transform = entity->get_transform(); auto i = lower_bound_member(entities, transform, &ReplicatedEntity::transform); - i = entities.emplace(i, entity, transform, zygote); - send_spawn(*i, -1); + entities.emplace(i, entity, transform, zygote); } } diff --git a/source/game/replicator.h b/source/game/replicator.h index 573a5fc..6742593 100644 --- a/source/game/replicator.h +++ b/source/game/replicator.h @@ -22,6 +22,7 @@ private: Handle entity; Handle transform; Handle zygote; + bool visible_to_players = false; }; EventObserver observer; @@ -38,6 +39,7 @@ public: void add_target_player(unsigned); void tick(Time::TimeDelta) override { } + void deferred_tick() override; private: void component_created(const Events::ComponentCreated &); -- 2.45.2