添加技能次數

This commit is contained in:
aozhiwei 2021-04-08 14:28:43 +08:00
parent 87960564a3
commit 034fe8de3c
2 changed files with 39 additions and 4 deletions

View File

@ -10,7 +10,19 @@ void Skill::Initialzie()
switch (meta->i->skill_type()) { switch (meta->i->skill_type()) {
case kActiveSkill: case kActiveSkill:
{ {
inc_times_timer_ = owner->room->xtimer.AddRepeatTimerAndAttach
(
GetCd() / FRAME_RATE_MS,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Skill* skill = (Skill*)param.sender.GetUserData();
if (skill->GetCurrTimes() < skill->GetMaxTimes()) {
skill->curr_times_++;
}
},
&xtimer_attacher.timer_list_);
} }
break; break;
default: default:
@ -27,8 +39,17 @@ int Skill::GetCd()
int Skill::GetPassedTime() int Skill::GetPassedTime()
{ {
int passed_time = (owner->room->GetFrameNo() - last_use_frameno) * FRAME_RATE_MS; if (!inc_times_timer_) {
return passed_time; abort();
}
if (GetCurrTimes() >= GetMaxTimes()) {
return GetCd();
} else {
int remain_time = owner->room->xtimer.GetRemainTime(inc_times_timer_);
int passed_time = GetCd() - remain_time * FRAME_RATE_MS;
passed_time = std::max(0, passed_time);
return passed_time;
}
} }
int Skill::GetLeftTime() int Skill::GetLeftTime()
@ -44,7 +65,7 @@ void Skill::FillMFSkill(cs::MFSkill* skill_pb)
skill_pb->set_left_time(GetLeftTime()); skill_pb->set_left_time(GetLeftTime());
skill_pb->set_cd_time(GetCd()); skill_pb->set_cd_time(GetCd());
skill_pb->set_curr_times(GetCurrTimes()); skill_pb->set_curr_times(GetCurrTimes());
skill_pb->set_max_times(meta->i->max_times()); skill_pb->set_max_times(GetMaxTimes());
} }
void Skill::ClearPassiveSkillBuff() void Skill::ClearPassiveSkillBuff()
@ -77,6 +98,12 @@ void Skill::AddPassiveSkillBuff()
void Skill::DecTimes() void Skill::DecTimes()
{ {
if (!inc_times_timer_) {
abort();
}
if (GetCurrTimes() >= GetMaxTimes()) {
owner->room->xtimer.ModifyTimer(inc_times_timer_, GetCd() / FRAME_RATE_MS);
}
--curr_times_; --curr_times_;
if (curr_times_ < 0) { if (curr_times_ < 0) {
curr_times_ = 0; curr_times_ = 0;
@ -87,3 +114,8 @@ int Skill::GetCurrTimes()
{ {
return curr_times_; return curr_times_;
} }
int Skill::GetMaxTimes()
{
return meta->i->max_times();
}

View File

@ -16,6 +16,7 @@ enum SkillType_e
kPassiveSkill = 2 kPassiveSkill = 2
}; };
struct xtimer_list;
class Creature; class Creature;
class Skill class Skill
{ {
@ -30,6 +31,7 @@ class Skill
int GetLeftTime(); int GetLeftTime();
int GetPassedTime(); int GetPassedTime();
int GetCurrTimes(); int GetCurrTimes();
int GetMaxTimes();
void DecTimes(); void DecTimes();
void FillMFSkill(cs::MFSkill* skill_pb); void FillMFSkill(cs::MFSkill* skill_pb);
@ -38,4 +40,5 @@ class Skill
private: private:
int curr_times_ = 0; int curr_times_ = 0;
xtimer_list* inc_times_timer_ = nullptr;
}; };