From 3ac23bdc697ab754a381ce4768f7e48126fc73f4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 24 Apr 2019 10:31:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=A2=B0=E6=92=9E=E6=A3=80?= =?UTF-8?q?=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/entity.h | 2 +- server/gameserver/human.cc | 32 ++++++++++++++++++++++++++++---- server/gameserver/human.h | 2 -- 3 files changed, 29 insertions(+), 7 deletions(-) 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;