1
This commit is contained in:
parent
8a389c0371
commit
e4f4b2ff0e
@ -75,88 +75,7 @@ void MachineGunBuff::ProcSkill()
|
||||
break;
|
||||
case MAGIC_FG:
|
||||
{
|
||||
bool shot_ok = false;
|
||||
a8::Vec2 target_dir;
|
||||
float fly_distance = 0;
|
||||
int trace_target_uniid = 0;
|
||||
owner->Shot(owner->context_dir, shot_ok, fly_distance, trace_target_uniid);
|
||||
|
||||
owner->room->xtimer.ModifyTime
|
||||
(remover_timer,
|
||||
skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS);
|
||||
event_handlers_.push_back
|
||||
(
|
||||
owner->GetTrigger()->AddListener
|
||||
(
|
||||
kSkillBulletPreCreateEvent,
|
||||
[this] (const a8::Args& args)
|
||||
{
|
||||
int delay_time = args.Get<int>(0);
|
||||
const mt::Skill* bullet_skill_meta = args.Get<const mt::Skill*>(1);
|
||||
int passed_frames = (owner->room->GetFrameNo() - add_frameno);
|
||||
int raw_frames = skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS;
|
||||
if (skill_meta == bullet_skill_meta &&
|
||||
delay_time >= (passed_frames - raw_frames - 2) * FRAME_RATE_MS) {
|
||||
int remain_time = owner->room->xtimer.GetRemainTime(remover_timer);
|
||||
owner->room->xtimer.ModifyTime
|
||||
(remover_timer, delay_time / FRAME_RATE_MS + 2);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
a8::XPrintf("event1 %d %d %d\n", {passed_frames, raw_frames, delay_time});
|
||||
#endif
|
||||
}
|
||||
)
|
||||
);
|
||||
event_handlers_.push_back
|
||||
(
|
||||
owner->GetTrigger()->AddListener
|
||||
(
|
||||
kFlyHookCreateEvent,
|
||||
[this] (const a8::Args& args)
|
||||
{
|
||||
Bullet* bullet = args.Get<Bullet*>(0);
|
||||
int passed_frames = (owner->room->GetFrameNo() - add_frameno);
|
||||
int raw_frames = skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS;
|
||||
owner->room->xtimer.ModifyTime
|
||||
(remover_timer,
|
||||
skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS);
|
||||
#ifdef DEBUG
|
||||
a8::XPrintf("event2 %d %d\n", {passed_frames, raw_frames});
|
||||
#endif
|
||||
})
|
||||
);
|
||||
event_handlers_.push_back
|
||||
(
|
||||
owner->GetTrigger()->AddListener
|
||||
(
|
||||
kFlyHookDestoryEvent,
|
||||
[this] (const a8::Args& args)
|
||||
{
|
||||
int passed_frames = (owner->room->GetFrameNo() - add_frameno);
|
||||
int raw_frames = skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS;
|
||||
if (passed_frames >= raw_frames) {
|
||||
owner->RemoveBuffByUniId(buff_uniid);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
a8::XPrintf("event3 %d %d\n", {passed_frames, raw_frames});
|
||||
#endif
|
||||
}
|
||||
)
|
||||
);
|
||||
#ifdef DEBUG
|
||||
{
|
||||
std::string dbg_msg = a8::Format
|
||||
(
|
||||
"skill_id:%d 飞钩 距离:%f 钩子持续时间:%f",
|
||||
{
|
||||
skill_meta->skill_id(),
|
||||
skill_meta->_number_meta->_float_range,
|
||||
skill_meta->_number_meta->_float_time,
|
||||
});
|
||||
owner->SendDebugMsg(dbg_msg);
|
||||
a8::XPrintf("%s\n", {dbg_msg});
|
||||
}
|
||||
#endif
|
||||
FgSkill();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -166,3 +85,90 @@ void MachineGunBuff::ProcSkill()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MachineGunBuff::FgSkill()
|
||||
{
|
||||
bool shot_ok = false;
|
||||
a8::Vec2 target_dir;
|
||||
float fly_distance = 0;
|
||||
int trace_target_uniid = 0;
|
||||
owner->Shot(owner->context_dir, shot_ok, fly_distance, trace_target_uniid);
|
||||
|
||||
owner->room->xtimer.ModifyTime
|
||||
(remover_timer,
|
||||
skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS);
|
||||
event_handlers_.push_back
|
||||
(
|
||||
owner->GetTrigger()->AddListener
|
||||
(
|
||||
kSkillBulletPreCreateEvent,
|
||||
[this] (const a8::Args& args)
|
||||
{
|
||||
int delay_time = args.Get<int>(0);
|
||||
const mt::Skill* bullet_skill_meta = args.Get<const mt::Skill*>(1);
|
||||
int passed_frames = (owner->room->GetFrameNo() - add_frameno);
|
||||
int raw_frames = skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS;
|
||||
if (skill_meta == bullet_skill_meta &&
|
||||
delay_time >= (passed_frames - raw_frames - 2) * FRAME_RATE_MS) {
|
||||
int remain_time = owner->room->xtimer.GetRemainTime(remover_timer);
|
||||
owner->room->xtimer.ModifyTime
|
||||
(remover_timer, delay_time / FRAME_RATE_MS + 2);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
a8::XPrintf("event1 %d %d %d\n", {passed_frames, raw_frames, delay_time});
|
||||
#endif
|
||||
}
|
||||
)
|
||||
);
|
||||
event_handlers_.push_back
|
||||
(
|
||||
owner->GetTrigger()->AddListener
|
||||
(
|
||||
kFlyHookCreateEvent,
|
||||
[this] (const a8::Args& args)
|
||||
{
|
||||
Bullet* bullet = args.Get<Bullet*>(0);
|
||||
int passed_frames = (owner->room->GetFrameNo() - add_frameno);
|
||||
int raw_frames = skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS;
|
||||
owner->room->xtimer.ModifyTime
|
||||
(remover_timer,
|
||||
skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS);
|
||||
#ifdef DEBUG
|
||||
a8::XPrintf("event2 %d %d\n", {passed_frames, raw_frames});
|
||||
#endif
|
||||
})
|
||||
);
|
||||
event_handlers_.push_back
|
||||
(
|
||||
owner->GetTrigger()->AddListener
|
||||
(
|
||||
kFlyHookDestoryEvent,
|
||||
[this] (const a8::Args& args)
|
||||
{
|
||||
int passed_frames = (owner->room->GetFrameNo() - add_frameno);
|
||||
int raw_frames = skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS;
|
||||
if (passed_frames >= raw_frames) {
|
||||
owner->RemoveBuffByUniId(buff_uniid);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
a8::XPrintf("event3 %d %d\n", {passed_frames, raw_frames});
|
||||
#endif
|
||||
}
|
||||
)
|
||||
);
|
||||
#ifdef DEBUG
|
||||
{
|
||||
std::string dbg_msg = a8::Format
|
||||
(
|
||||
"skill_id:%d 飞钩 距离:%f 钩子持续时间:%f",
|
||||
{
|
||||
skill_meta->skill_id(),
|
||||
skill_meta->_number_meta->_float_range,
|
||||
skill_meta->_number_meta->_float_time,
|
||||
});
|
||||
owner->SendDebugMsg(dbg_msg);
|
||||
a8::XPrintf("%s\n", {dbg_msg});
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
@ -13,4 +13,5 @@ class MachineGunBuff : public Buff
|
||||
|
||||
void SwitchWeapons();
|
||||
void ProcSkill();
|
||||
void FgSkill();
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user