diff --git a/include/Cubed/gameplay/server_entity_manager.hpp b/include/Cubed/gameplay/server_entity_manager.hpp index 13a69d4..7bfb7dd 100644 --- a/include/Cubed/gameplay/server_entity_manager.hpp +++ b/include/Cubed/gameplay/server_entity_manager.hpp @@ -46,6 +46,7 @@ private: void send_all_entities(std::shared_ptr& session); void update_ai(); void update_move(); + void update_send(); template EntityID create_entity_in_factory(Args&&... args) { auto entity = m_registry.create(); diff --git a/src/gameplay/server_entity_manager.cpp b/src/gameplay/server_entity_manager.cpp index c87ae82..209ae30 100644 --- a/src/gameplay/server_entity_manager.cpp +++ b/src/gameplay/server_entity_manager.cpp @@ -29,14 +29,35 @@ void ServerEntityManager::update() { handle_task(); update_ai(); update_move(); + + update_send(); } void ServerEntityManager::update_ai() { WanderAISystem::update(m_registry); } + void ServerEntityManager::update_move() { SpeedSystem::update( static_cast(m_world.get_per_tick_time()) / 1000.0f, m_registry); PhysicalSystem::update(m_world, m_registry); } + +void ServerEntityManager::update_send() { + auto sessions = m_world.get_all_session(); + auto view = m_registry.view(); + + for (auto& e : view) { + auto [entity, creature] = view.get(e); + Arena arena; + auto* p = Arena::Create(&arena); + p->set_id(entity.id); + Tools::set_net_pos(p, creature.transform.position.value); + + for (auto& s : sessions) { + s->send(make_packet(p)); + } + } +} + void ServerEntityManager::handle_task() { TaskPair pair; while (m_tasks.try_pop(pair)) {