This commit is contained in:
aozhiwei 2021-07-20 10:15:00 +00:00
parent 31646952f4
commit af4e7708c7
3 changed files with 50 additions and 13 deletions

View File

@ -464,20 +464,18 @@ void Buff::ProcTurnOver()
a8::Vec2 old_pos = owner->GetPos(); a8::Vec2 old_pos = owner->GetPos();
float distance = float distance =
owner->HasBuffEffect(kBET_Car) ? phase->param1.GetDouble() * 1.5 : phase->param1.GetDouble(); owner->HasBuffEffect(kBET_Car) ? phase->param1.GetDouble() * 1.5 : phase->param1.GetDouble();
if (meta->int_param1 == 1) { owner->_UpdateMove(distance);
//穿墙 int moved_distance = (int)owner->GetPos().Distance(old_pos);
} else { moved_distance = std::max(moved_distance, 200);
owner->_UpdateMove(distance); if (!meta->param1_int_list.empty()) {
for (int i = 0; i < moved_distance; i += 5) {
}
} }
if (!meta->param2_int_list.empty()) { if (!meta->param2_int_list.empty()) {
int time = 0;
float moved_distance = owner->GetPos().Distance(old_pos);
if (std::abs(moved_distance) > 0.01f) {
time = ((moved_distance / distance) * meta->param3) / FRAME_RATE_MS;
}
owner->room->xtimer.AddDeadLineTimerAndAttach owner->room->xtimer.AddDeadLineTimerAndAttach
( (
time, meta->int_param4 / FRAME_RATE_MS,
a8::XParams() a8::XParams()
.SetSender(owner) .SetSender(owner)
.SetParam1(meta), .SetParam1(meta),
@ -485,9 +483,16 @@ void Buff::ProcTurnOver()
{ {
Creature* c = (Creature*)param.sender.GetUserData(); Creature* c = (Creature*)param.sender.GetUserData();
MetaData::Buff* buff_meta = (MetaData::Buff*)param.param1.GetUserData(); MetaData::Buff* buff_meta = (MetaData::Buff*)param.param1.GetUserData();
for (int buff_id : buff_meta->param2_int_list) { c->TraverseCreatures
c->TryAddBuff(c, buff_id); (
} [c, buff_meta] (Creature* target, bool& stop)
{
if (c->GetPos().Distance(target->GetPos()) < buff_meta->int_param3) {
for (int buff_id : buff_meta->param2_int_list) {
target->TryAddBuffWithTarget(c, buff_id);
}
}
});
}, },
&owner->xtimer_attacher.timer_list_ &owner->xtimer_attacher.timer_list_
); );

View File

@ -410,6 +410,37 @@ int Creature::TryAddBuff(Creature* caster, int buff_id)
return -1; return -1;
} }
int Creature::TryAddBuffWithTarget(Creature* caster, int buff_id)
{
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
if (buff_meta) {
bool be_add = false;
switch (buff_meta->i->buff_target()) {
case kBuffTargetSelf:
{
be_add = caster == this;
}
break;
case kBuffTargetFriendly:
{
team_id == caster->team_id;
}
break;
case kBuffTargetEnemy:
{
team_id != caster->team_id;
}
break;
default:
{
}
break;
}
return TryAddBuff(caster, buff_id);
}
return -1;
}
void Creature::RemoveBuffById(int buff_id) void Creature::RemoveBuffById(int buff_id)
{ {
int buff_uniid = 0; int buff_uniid = 0;

View File

@ -103,6 +103,7 @@ class Creature : public MoveableEntity
bool IsImmuneBuffEffect(int buff_effect); bool IsImmuneBuffEffect(int buff_effect);
int MustBeAddBuff(Creature* caster, int buff_id); int MustBeAddBuff(Creature* caster, int buff_id);
int TryAddBuff(Creature* caster, int buff_id); int TryAddBuff(Creature* caster, int buff_id);
int TryAddBuffWithTarget(Creature* caster, int buff_id);
void RemoveBuffById(int buff_id); void RemoveBuffById(int buff_id);
void RemoveBuffByUniId(int buff_uniid); void RemoveBuffByUniId(int buff_uniid);
void ClearBuffById(int buff_id); void ClearBuffById(int buff_id);