aozhiwei f7a468abe9 1
2021-03-18 11:23:28 +08:00

44 lines
1.3 KiB
C++

#pragma once
#include "moveableentity.h"
#include "buff.h"
#include "cs_proto.pb.h"
class Creature : public MoveableEntity
{
public:
HumanAbility ability;
std::function<bool ()> on_move_collision;
bool HasBuffEffect(int buff_effect_id);
Buff* GetBuffByEffectId(int effect_id);
Buff* GetBuffById(int buff_id);
void AddBuff(Creature* caster,
MetaData::Buff* buff_meta,
int skill_lv,
MetaData::Skill* buff_skill_meta = nullptr);
bool IsImmuneBuffEffect(int buff_effect);
void MustBeAddBuff(Creature* caster, int buff_id);
void RemoveBuffById(int buff_id);
void RecalcBuffAttr();
void RemoveBuffByEffectId(int buff_effect_id);
void ClearBuffList();
float GetBuffAttrAbs(int attr_id);
float GetBuffAttrRate(int attr_id);
void FillBuffList(::google::protobuf::RepeatedPtrField<::cs::MFBuff>* pb_buff_list);
private:
virtual void AddBuffPostProc(Creature* caster, Buff* buff);
virtual void OnBuffRemove(const Buff& buff);
virtual void SendDebugMsg(const std::string& debug_msg);
private:
std::array<float, kHAT_End> buff_attr_abs_ = {};
std::array<float, kHAT_End> buff_attr_rate_ = {};
std::array<Buff*, kBET_End> buff_effect_ = {};
std::list<Buff> buff_list_;
};