1
This commit is contained in:
parent
b4f4b9cdfd
commit
0a4663c9a0
@ -267,6 +267,49 @@ void RoomObstacle::Explosion()
|
|||||||
void RoomObstacle::SpecExplosion()
|
void RoomObstacle::SpecExplosion()
|
||||||
{
|
{
|
||||||
++explosion_times_;
|
++explosion_times_;
|
||||||
|
if (meta->i->damage_dia() > 0.01f &&
|
||||||
|
meta->i->damage() > 0.01f) {
|
||||||
|
if (!grid_list_) {
|
||||||
|
grid_list_ = new std::set<GridCell*>();
|
||||||
|
room->grid_service->GetAllCellsByXy(room, GetPos().x, GetPos().y, *grid_list_);
|
||||||
|
}
|
||||||
|
std::set<Entity*> objects;
|
||||||
|
room->grid_service->TouchAllLayerHumanList
|
||||||
|
(
|
||||||
|
room->GetRoomIdx(),
|
||||||
|
*grid_list_,
|
||||||
|
[this, &objects] (Human* hum, bool& stop)
|
||||||
|
{
|
||||||
|
float distance = (hum->GetPos() - GetPos()).Norm();
|
||||||
|
if (master.Get()->team_id != hum->team_id && distance < meta->i->damage_dia()) {
|
||||||
|
objects.insert(hum);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
a8::Vec2 bomb_pos = GetPos();
|
||||||
|
room->frame_event.AddExplosionEx(master,
|
||||||
|
meta->i->thing_id(),
|
||||||
|
bomb_pos,
|
||||||
|
meta->i->explosion_effect());
|
||||||
|
for (auto& target : objects) {
|
||||||
|
switch (target->GetEntityType()) {
|
||||||
|
case ET_Player:
|
||||||
|
{
|
||||||
|
Human* hum = (Human*)target;
|
||||||
|
if (!hum->dead) {
|
||||||
|
float dmg = meta->i->damage();
|
||||||
|
float def = hum->ability.def;
|
||||||
|
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
||||||
|
hum->DecHP(finaly_dmg, VP_Mine, TEXT("battle_server_killer_mine", "地雷"), VW_Mine);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (explosion_times_ >= meta->i->explosion_times()) {
|
if (explosion_times_ >= meta->i->explosion_times()) {
|
||||||
room->xtimer.DeleteTimer(room->xtimer.GetRunningTimer());
|
room->xtimer.DeleteTimer(room->xtimer.GetRunningTimer());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user