#include "precompile.h" #include "smoke_mitask.h" #include "room.h" #include "player.h" #include "metadata.h" void SmokeMiTask::Check() { { std::list deleted_hums; for (auto& hum : player_set) { if (bomb_pos.Distance2D2(hum->GetPos()) > gun_meta->float_param1 + hum->meta->pb->radius()) { hum->RemoveBuffByEffectId(kBET_HunLuan); deleted_hums.push_back(hum); } } for (auto& hum : deleted_hums) { player_set.erase(hum); } } room->TraversePlayerList (a8::XParams(), [this] (Player* hum, a8::XParams&) -> bool { if (bomb_pos.Distance2D2(hum->GetPos()) < gun_meta->float_param1 + hum->meta->pb->radius()) { if (!hum->HasBuffEffect(kBET_HunLuan)) { hum->AddBuff(nullptr, buff_meta, nullptr); player_set.insert(hum); } } return true; }); } void SmokeMiTask::Done() { for (auto& hum : player_set) { hum->RemoveBuffByEffectId(kBET_HunLuan); } }