From 3301cec6db573f657a3ea26f02b75c759cbcf3dd Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 3 Jun 2020 13:42:02 +0800 Subject: [PATCH] =?UTF-8?q?obstacle=E6=B7=BB=E5=8A=A0=E5=9C=86=E5=BD=A2?= =?UTF-8?q?=E7=A2=B0=E6=92=9E=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/obstacle.cc | 50 ++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index 6b608e8..94f3cc0 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -90,6 +90,13 @@ void Obstacle::RecalcSelfCollider() break; } } + if (!self_collider_) { + self_collider_ = new CircleCollider(); + self_collider_->owner = this; + AddEntityCollider(self_collider_); + self_collider_->pos = a8::Vec2(); + self_collider_->rad = 0.0f; + } } void Obstacle::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) @@ -273,30 +280,29 @@ void Obstacle::Explosion(Bullet* bullet) hum->DecHP(finaly_dmg, VP_Mine, "地雷", VW_Mine); } } - break; - case ET_Obstacle: - { - Obstacle* obstacle = (Obstacle*)target; - if (!obstacle->IsDead(room) && obstacle->meta->i->attack_type() == 1) { - float dmg = meta->i->damage(); - float def = 0; - float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); + break; + case ET_Obstacle: + { + Obstacle* obstacle = (Obstacle*)target; + if (!obstacle->IsDead(room) && obstacle->meta->i->attack_type() == 1) { + float dmg = meta->i->damage(); + float def = 0; + float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); - obstacle->SetHealth(room, - std::max(0.0f, obstacle->health_ - finaly_dmg)); - if (obstacle->GetHealth(room) <= 0.01f) { - obstacle->Die(room); - } - if (obstacle->IsDead(room)) { - bullet->player->DropItems(obstacle); - } - obstacle->BroadcastFullState(room); - } + obstacle->SetHealth(room, + std::max(0.0f, obstacle->health_ - finaly_dmg)); + if (obstacle->GetHealth(room) <= 0.01f) { + obstacle->Die(room); } - break; - default: - break; - + if (obstacle->IsDead(room)) { + bullet->player->DropItems(obstacle); + } + obstacle->BroadcastFullState(room); + } + } + break; + default: + break; } } }