diff --git a/server/gameserver/building.cc b/server/gameserver/building.cc index 797d02c..e03b9c4 100644 --- a/server/gameserver/building.cc +++ b/server/gameserver/building.cc @@ -43,6 +43,19 @@ void Building::RecalcSelfCollider() permanent_map_service->AddCollider(collider); } + for (auto& obj : meta->i->halfwallobj()) { + AabbCollider* collider = new AabbCollider(); + collider->owner = this; + collider->_min = a8::Vec2(obj.x() - obj.width()/2.0 - meta->i->tilewidth()/2.0, + obj.y() - obj.height()/2.0 - meta->i->tileheight()/2.0); + collider->_max = a8::Vec2(obj.x() + obj.width()/2.0 - meta->i->tilewidth()/2.0, + obj.y() + obj.height()/2.0 - meta->i->tileheight()/2.0); + a8::SetBitFlag(collider->tag, kHalfWallTag); + AddEntityCollider(collider); + collider_list.push_back(collider); + permanent_map_service->AddCollider(collider); + } + AutoAdjust(collider_list); } diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index eba0b2f..196896c 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -216,7 +216,7 @@ void Bullet::MapServiceUpdate() std::set colliders; room->map_service->GetColliders(room, GetX(), GetY(), colliders); for (ColliderComponent* collider : colliders) { - if (TestCollision(room, collider)) { + if (TestCollision(room, collider) && !a8::HasBitFlag(collider->tag, kHalfWallTag)) { objects.insert(collider->owner); } } diff --git a/server/gameserver/collider.h b/server/gameserver/collider.h index ceb0e81..0184539 100644 --- a/server/gameserver/collider.h +++ b/server/gameserver/collider.h @@ -14,6 +14,7 @@ class ColliderComponent Entity* owner = nullptr; ColliderType_e type = CT_None; bool active = true; + int tag = 0; bool Intersect(ColliderComponent* b); bool IntersectEx(const a8::Vec2& pos, ColliderComponent* b); diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 46ae74b..82514e4 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -312,6 +312,11 @@ enum AIMode_e kZombieAiMode = 2 }; +enum ColliderTag_e +{ + kHalfWallTag = 1 +}; + const char* const PROJ_NAME_FMT = "game%d_gameserver"; const char* const PROJ_ROOT_FMT = "/data/logs/%s"; @@ -368,3 +373,4 @@ const int ZOMBIE_RACE_META_START_ID = 6001; const int TERMINATOR_BUFF_ID = 1033; const int TURN_OVER_SKILL_ID = 41001; + diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index c479199..6cb6622 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -312,6 +312,7 @@ message BuildingJson repeated DropObjJson dropObj = 5; repeated StaticObjJson staticObj = 6; repeated LootObjJson lootObj = 7; + repeated StaticObjJson halfwallObj = 8; optional int32 mapId = 20; }