diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 535bd93..969426f 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -33,8 +33,14 @@ void Bullet::Update(int delta_time) float distance = (pos - born_pos).Norm(); if (meta->i->_inventory_slot() == 5 || meta->i->_inventory_slot() == 6) { - if (distance >= fly_distance) { - //炸弹烟雾弹飞到目的地 + std::vector objects; + int detection_flags = 0; + { + a8::SetBitFlag(detection_flags, ET_Obstacle); + a8::SetBitFlag(detection_flags, ET_Building); + } + room->CollisionDetection(this, detection_flags, objects); + if (!objects.empty() || distance >= fly_distance) { ProcBomb(); } } else { @@ -118,7 +124,12 @@ void Bullet::ProcBomb() explosions = &itr->second; } - Vector2D bomb_pos = born_pos + born_dir * fly_distance; + #if 1 + Vector2D bomb_pos = pos; + #else + float distance = (pos - born_pos).Norm(); + Vector2D bomb_pos = born_pos + born_dir * distance; + #endif cs::MFExplosion* explosion = explosions->Add(); explosion->set_item_id(meta->i->id()); bomb_pos.ToPB(explosion->mutable_pos()); @@ -138,7 +149,12 @@ void Bullet::ProcBomb() smokes = &itr->second; } - Vector2D bomb_pos = born_pos + born_dir * fly_distance; + #if 1 + Vector2D bomb_pos = pos; + #else + float distance = (pos - born_pos).Norm(); + Vector2D bomb_pos = born_pos + born_dir * distance; + #endif cs::MFSmoke* smoke = smokes->Add(); smoke->set_item_id(meta->i->id()); bomb_pos.ToPB(smoke->mutable_pos());