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();
float distance =
owner->HasBuffEffect(kBET_Car) ? phase->param1.GetDouble() * 1.5 : phase->param1.GetDouble();
if (meta->int_param1 == 1) {
//穿墙
} else {
owner->_UpdateMove(distance);
owner->_UpdateMove(distance);
int moved_distance = (int)owner->GetPos().Distance(old_pos);
moved_distance = std::max(moved_distance, 200);
if (!meta->param1_int_list.empty()) {
for (int i = 0; i < moved_distance; i += 5) {
}
}
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
(
time,
meta->int_param4 / FRAME_RATE_MS,
a8::XParams()
.SetSender(owner)
.SetParam1(meta),
@ -485,9 +483,16 @@ void Buff::ProcTurnOver()
{
Creature* c = (Creature*)param.sender.GetUserData();
MetaData::Buff* buff_meta = (MetaData::Buff*)param.param1.GetUserData();
for (int buff_id : buff_meta->param2_int_list) {
c->TryAddBuff(c, buff_id);
}
c->TraverseCreatures
(
[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_
);

View File

@ -410,6 +410,37 @@ int Creature::TryAddBuff(Creature* caster, int buff_id)
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)
{
int buff_uniid = 0;

View File

@ -103,6 +103,7 @@ class Creature : public MoveableEntity
bool IsImmuneBuffEffect(int buff_effect);
int MustBeAddBuff(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 RemoveBuffByUniId(int buff_uniid);
void ClearBuffById(int buff_id);