aozhiwei 9166c94882 1
2021-03-23 14:19:35 +08:00

60 lines
1.5 KiB
C++

#include "precompile.h"
#include "skill.h"
#include "creature.h"
#include "room.h"
#include "metamgr.h"
int Skill::GetCd()
{
return meta->i->skill_cd() * 1000;
}
int Skill::GetPassedTime()
{
int passed_time = (owner->room->GetFrameNo() - last_use_frameno) * FRAME_RATE_MS;
return passed_time;
}
int Skill::GetLeftTime()
{
int passed_time = GetPassedTime();
int skill_left_time = std::max(0, GetCd() - passed_time);
return skill_left_time;
}
void Skill::FillMFSkill(cs::MFSkill* skill_pb)
{
skill_pb->set_skill_id(meta->i->skill_id());
skill_pb->set_left_time(GetLeftTime());
skill_pb->set_cd_time(GetCd());
}
void Skill::ClearPassiveSkillBuff()
{
for (int buff_id : meta->buff_list) {
Buff* buff = owner->GetBuffById(buff_id);
if (buff &&
(buff->meta->i->buff_target() == kBuffTargetSelf ||
buff->meta->i->buff_target() == kBuffTargetFriendly)) {
owner->RemoveBuffById(buff_id);
}
}
}
void Skill::AddPassiveSkillBuff()
{
int old_skill_target_id_ = owner->skill_target_id_;
a8::Vec2 old_skill_target_pos_ = owner->skill_target_pos_;
owner->skill_target_id_ = owner->GetEntityUniId();
owner->skill_target_pos_ = owner->GetPos();
std::set<Entity*> target_list;
owner->SelectSkillTargets(this, owner->GetPos(), target_list);
owner->TriggerBuff(this, target_list, kBTT_UseSkill);
owner->skill_target_id_ = old_skill_target_id_;
owner->skill_target_pos_ = old_skill_target_pos_;
}