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> zygote = dynamic_handle_cast<Zygote>(event.component))
Handle<Entity> entity = zygote->get_entity();
Handle<Transform> 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);
}
}
Handle<Entity> entity;
Handle<Transform> transform;
Handle<Zygote> zygote;
+ bool visible_to_players = false;
};
EventObserver observer;
void add_target_player(unsigned);
void tick(Time::TimeDelta) override { }
+ void deferred_tick() override;
private:
void component_created(const Events::ComponentCreated &);