diff --git a/server/gameserver/entity.cc b/server/gameserver/entity.cc index 0494b20..5a07714 100644 --- a/server/gameserver/entity.cc +++ b/server/gameserver/entity.cc @@ -6,6 +6,7 @@ #include "building.h" #include "human.h" #include "app.h" +#include "mapservice.h" Entity::Entity() { @@ -191,3 +192,12 @@ void Entity::NotifyDelObject() } } } + +void Entity::RemoveFromMapService() +{ + if (room) { + for (ColliderComponent* collider : colliders) { + room->map_service.RemoveCollider(collider); + } + } +} diff --git a/server/gameserver/entity.h b/server/gameserver/entity.h index 6cc60bc..0950374 100644 --- a/server/gameserver/entity.h +++ b/server/gameserver/entity.h @@ -48,6 +48,7 @@ class Entity void BroadcastDeleteState(); void AddCollider(ColliderComponent* collider); void NotifyDelObject(); + void RemoveFromMapService(); private: std::list colliders; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index a9d963f..3e6688d 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -598,6 +598,9 @@ void Room::RemoveObjectLater(Entity* entity) break; case ET_Obstacle: { + entity->BroadcastDeleteState(); + entity->room->grid_service.DelEntity(entity); + entity->RemoveFromMapService(); } break; default: