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