This commit is contained in:
aozhiwei 2022-07-27 11:39:28 +08:00
parent 79d3154ffd
commit 24b02634aa

View File

@ -421,34 +421,36 @@ void Buff::ProcSprint()
[] (const a8::XParams& param) [] (const a8::XParams& param)
{ {
Buff* buff = (Buff*)param.sender.GetUserData(); Buff* buff = (Buff*)param.sender.GetUserData();
a8::Vec2* pre_pos = (a8::Vec2*)param.param2.GetUserData(); if (!buff->meta->param3_int_list.empty()) {
std::set<int>* hited_objects = (std::set<int>*)param.param1.GetUserData(); a8::Vec2* pre_pos = (a8::Vec2*)param.param2.GetUserData();
std::set<Creature*> enemys; std::set<int>* hited_objects = (std::set<int>*)param.param1.GetUserData();
a8::Vec2 old_pos = buff->owner->GetPos(); std::set<Creature*> enemys;
a8::Vec2 old_pos = buff->owner->GetPos();
if (pre_pos->ManhattanDistance(buff->owner->GetPos()) > 2) { if (pre_pos->ManhattanDistance(buff->owner->GetPos()) > 2) {
a8::Vec2 dir = buff->owner->GetPos() - (*pre_pos); a8::Vec2 dir = buff->owner->GetPos() - (*pre_pos);
dir.Normalize(); dir.Normalize();
float distance = buff->owner->GetPos().Distance((*pre_pos)); float distance = buff->owner->GetPos().Distance((*pre_pos));
for (int i = 0; i < (distance + 6); i += 5) { for (int i = 0; i < (distance + 6); i += 5) {
buff->owner->SetPos((*pre_pos) + (dir * i)); buff->owner->SetPos((*pre_pos) + (dir * i));
buff->owner->GetHitEnemys(enemys, buff->meta->param4); buff->owner->GetHitEnemys(enemys, buff->meta->param4);
for (auto& enemy : enemys) { for (auto& enemy : enemys) {
if (enemy->IsEntityType(ET_Car)) { if (enemy->IsEntityType(ET_Car)) {
continue; continue;
} }
if (hited_objects->find(enemy->GetUniId()) == hited_objects->end()) { if (hited_objects->find(enemy->GetUniId()) == hited_objects->end()) {
hited_objects->insert(enemy->GetUniId()); hited_objects->insert(enemy->GetUniId());
for (int buff_id : buff->meta->param3_int_list) { for (int buff_id : buff->meta->param3_int_list) {
enemy->TryAddBuff(buff->owner, buff_id); enemy->TryAddBuff(buff->owner, buff_id);
}
} }
} }
} }
} }
}
buff->owner->SetPos(old_pos); buff->owner->SetPos(old_pos);
*pre_pos = buff->owner->GetPos(); *pre_pos = buff->owner->GetPos();
}
}, },
&xtimer_attacher.timer_list_, &xtimer_attacher.timer_list_,
[] (const a8::XParams& param) [] (const a8::XParams& param)