1
This commit is contained in:
parent
8a389c0371
commit
e4f4b2ff0e
@ -75,88 +75,7 @@ void MachineGunBuff::ProcSkill()
|
|||||||
break;
|
break;
|
||||||
case MAGIC_FG:
|
case MAGIC_FG:
|
||||||
{
|
{
|
||||||
bool shot_ok = false;
|
FgSkill();
|
||||||
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
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
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 SwitchWeapons();
|
||||||
void ProcSkill();
|
void ProcSkill();
|
||||||
|
void FgSkill();
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user