翻滚Ok
This commit is contained in:
parent
31646952f4
commit
af4e7708c7
@ -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_
|
||||
);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user