This commit is contained in:
aozhiwei 2022-12-30 09:23:08 +08:00
parent 8a389c0371
commit e4f4b2ff0e
2 changed files with 89 additions and 82 deletions

View File

@ -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
}

View File

@ -13,4 +13,5 @@ class MachineGunBuff : public Buff
void SwitchWeapons();
void ProcSkill();
void FgSkill();
};