diff --git a/server/gameserver/entity.h b/server/gameserver/entity.h index 361e45b..0ca4c4e 100644 --- a/server/gameserver/entity.h +++ b/server/gameserver/entity.h @@ -52,7 +52,7 @@ class Entity int grid_id = 0; std::set grid_list; - Obstacle* last_collision_door = nullptr; + Entity* last_collision_door = nullptr; Entity(); virtual ~Entity(); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index e7af83b..022b53a 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -273,11 +273,35 @@ bool Human::IsCollision() return false; } - int detection_flags = 0; - a8::SetBitFlag(detection_flags, ET_Obstacle); - a8::SetBitFlag(detection_flags, ET_Building); std::vector objects; - room->CollisionDetection(this, detection_flags, objects); + for (auto& grid : grid_list) { + for (Entity* entity : grid->entity_list) { + switch (entity->entity_type) { + case ET_Obstacle: + { + if ( + (last_collision_door == nullptr || last_collision_door != entity) && + TestCollision(entity) + ){ + objects.push_back(entity); + } + } + break; + case ET_Building: + { + if (TestCollision(entity)) { + objects.push_back(entity); + } + } + break; + default: + { + + } + break; + } + } + } return !objects.empty(); } diff --git a/server/gameserver/human.h b/server/gameserver/human.h index acca250..5d242bf 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -123,8 +123,6 @@ class Human : public Entity void FindLocation(); void RefreshView(); -protected: - protected: long long last_shot_frameno_ = 0; std::set new_objects;