From 44deb18e2c4a07a3d6476a9b9235060695dc4cce Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 15 Jul 2019 19:35:58 +0800 Subject: [PATCH] 1 --- server/gameserver/bullet.cc | 4 ++++ server/gameserver/obstacle.cc | 14 +++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 2fffc81..fd97030 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -137,6 +137,9 @@ bool Bullet::IsBomb() void Bullet::MapServiceUpdate() { + if (dead) { + return; + } pos = pos + dir * meta->i->bullet_speed() / (float)SERVER_FRAME_RATE; float distance = (pos - born_pos).Norm(); if (room->OverBorder(pos, meta->i->bullet_rad())) { @@ -187,6 +190,7 @@ void Bullet::MapServiceUpdate() void Bullet::PostAttack() { + dead = true; auto fire_func = [] (const a8::XParams& param) { diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index a2bb93c..b506b17 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -165,10 +165,9 @@ void Obstacle::Explosion() if (explosioned) { return; } - float old_rad = self_collider_->rad; - if (self_collider_) { - self_collider_->rad = meta->i->damage_dia(); - } + CircleCollider collider; + collider.owner = this; + collider.rad = meta->i->damage_dia(); if (meta->i->damage_dia() > 0.01f && meta->i->damage() > 0.01f) { std::set objects; @@ -176,7 +175,7 @@ void Obstacle::Explosion() room->grid_service.GetAllCellsByXy(pos.x, pos.y, grid_list); for (auto& grid : grid_list) { for (Human* hum: grid->human_list) { - if (TestCollision(hum)) { + if (hum->TestCollision(&collider)) { objects.insert(hum); } } @@ -185,7 +184,7 @@ void Obstacle::Explosion() case ET_Obstacle: case ET_Building: { - if (entity != this && TestCollision(entity)) { + if (entity != this && entity->TestCollision(&collider)) { objects.insert(entity); } } @@ -238,9 +237,6 @@ void Obstacle::Explosion() } } } - if (self_collider_) { - self_collider_->rad = old_rad; - } explosioned = true; NotifyDelObject(); room->RemoveObjectLater(this);