1
This commit is contained in:
parent
0e3fccd389
commit
88258b5371
@ -466,11 +466,53 @@ void Buff::ProcTurnOver()
|
|||||||
owner->HasBuffEffect(kBET_Car) ? phase->param1.GetDouble() * 1.5 : phase->param1.GetDouble();
|
owner->HasBuffEffect(kBET_Car) ? phase->param1.GetDouble() * 1.5 : phase->param1.GetDouble();
|
||||||
owner->_UpdateMove(distance);
|
owner->_UpdateMove(distance);
|
||||||
int moved_distance = (int)owner->GetPos().Distance(old_pos);
|
int moved_distance = (int)owner->GetPos().Distance(old_pos);
|
||||||
moved_distance = std::max(moved_distance, 200);
|
moved_distance = std::min(moved_distance, 200);
|
||||||
if (!meta->param1_int_list.empty()) {
|
if (!meta->param1_int_list.empty() && moved_distance > 2) {
|
||||||
for (int i = 0; i < moved_distance; i += 5) {
|
std::set<Creature*> target_list;
|
||||||
|
owner->TraverseCreatures
|
||||||
|
(
|
||||||
|
[this, &target_list] (Creature* c, bool& stop)
|
||||||
|
{
|
||||||
|
if (owner->IsProperTarget(c) && owner->GetPos().Distance(c->GetPos()) < 300) {
|
||||||
|
target_list.insert(c);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
a8::Vec2 curr_pos = owner->GetPos();
|
||||||
|
a8::Vec2 dir = owner->GetPos() - old_pos;
|
||||||
|
dir.Normalize();
|
||||||
|
for (int i = 5; i < moved_distance; i += 5) {
|
||||||
|
owner->SetPos(old_pos + dir * i);
|
||||||
|
std::list<Creature*> hit_objects;
|
||||||
|
for (auto& target : target_list) {
|
||||||
|
if (owner->TestCollision(owner->room, target)) {
|
||||||
|
hit_objects.push_back(target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (auto& target : hit_objects) {
|
||||||
|
target_list.erase(target);
|
||||||
|
target->room->xtimer.AddDeadLineTimerAndAttach
|
||||||
|
(
|
||||||
|
meta->int_param4 / FRAME_RATE_MS * (i / moved_distance),
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(target)
|
||||||
|
.SetParam1(meta)
|
||||||
|
.SetParam2(owner->GetUniId()),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
Creature* c = (Creature*)param.sender.GetUserData();
|
||||||
|
MetaData::Buff* buff_meta = (MetaData::Buff*)param.param1.GetUserData();
|
||||||
|
Entity* caster = c->room->GetEntityByUniId(param.param2);
|
||||||
|
if (caster && caster->IsCreature(c->room)) {
|
||||||
|
for (int buff_id : buff_meta->param1_int_list) {
|
||||||
|
c->TryAddBuff((Creature*)caster, buff_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
&target->xtimer_attacher.timer_list_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
owner->SetPos(curr_pos);
|
||||||
}
|
}
|
||||||
if (!meta->param2_int_list.empty()) {
|
if (!meta->param2_int_list.empty()) {
|
||||||
owner->room->xtimer.AddDeadLineTimerAndAttach
|
owner->room->xtimer.AddDeadLineTimerAndAttach
|
||||||
|
Loading…
x
Reference in New Issue
Block a user