From 2e7e015c6a2d7289cde458f26a90e2cc50a993fc Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 8 May 2019 15:43:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9C=B0=E9=9B=B7=E4=BC=A4?= =?UTF-8?q?=E5=AE=B3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/bullet.cc | 8 +++---- server/gameserver/obstacle.cc | 43 ++++++++++++++++++++--------------- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 0f1c4b6..31e5e0a 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -131,14 +131,14 @@ void Bullet::OnHit(std::set& objects) obstacle->dead = obstacle->health <= 0.01f; obstacle->dead_frameno = room->frame_no; if (obstacle->dead) { + if (obstacle->meta->i->damage_dia() > 0.01f && + obstacle->meta->i->damage() > 0.01f) { + obstacle->Explosion(this); + } obstacle->ClearColliders(); room->ScatterDrop(obstacle->pos, obstacle->meta->i->drop()); } obstacle->BroadcastFullState(); - if (obstacle->meta->i->damage_dia() > 0.01f && - obstacle->meta->i->damage() > 0.01f) { - obstacle->Explosion(this); - } } } break; diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index eb2af48..d1fe53f 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -125,31 +125,35 @@ ColliderComponent* Obstacle::GetBoxBound() void Obstacle::Explosion(Bullet* bullet) { + float old_rad = self_collider_->rad; + if (self_collider_) { + self_collider_->rad = meta->i->damage_dia(); + } if (meta->i->damage_dia() > 0.01f && meta->i->damage() > 0.01f) { std::set objects; + std::set grid_list; + room->grid_service.GetAllCellsByXy(pos.x, pos.y, grid_list); for (auto& grid : grid_list) { for (Human* hum: grid->human_list) { - { - if (TestCollision(hum)) { - objects.insert(hum); - } + if (TestCollision(hum)) { + objects.insert(hum); } - for (Entity* entity : grid->entity_list) { - switch (entity->entity_type) { - case ET_Obstacle: - case ET_Building: - { - if (TestCollision(entity)) { - objects.insert(entity); - } + } + for (Entity* entity : grid->entity_list) { + switch (entity->entity_type) { + case ET_Obstacle: + case ET_Building: + { + if (entity != this && TestCollision(entity)) { + objects.insert(entity); } - break; - default: - { - } - break; } + break; + default: + { + } + break; } }//end for } @@ -196,5 +200,8 @@ void Obstacle::Explosion(Bullet* bullet) } } - } + } + if (self_collider_) { + self_collider_->rad = old_rad; + } }