aozhiwei a1dafd094f 1
2021-06-23 03:02:08 +00:00

55 lines
1.6 KiB
C++

#pragma once
#include "creature.h"
#include "cs_proto.pb.h"
#include "weakptr.h"
namespace MetaData
{
struct Player;
}
class Human;
class Room;
class HeroAI;
class Creature;
class Hero : public Creature
{
public:
CreatureWeakPtr master;
MetaData::Player* meta = nullptr;
bool shot_hold = false;
Hero();
virtual ~Hero() override;
virtual void Initialize() override;
virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override;
virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override;
virtual void OnBulletHit(Bullet* bullet) override;
virtual void Update(int delta_time) override;
virtual void DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) override;
virtual float GetSpeed() override;
virtual float GetRadius() override;
virtual float GetHitRadius() override;
virtual void GetAabbBox(AabbCollider& aabb_box) override;
virtual void GetHitAabbBox(AabbCollider& aabb_box) override;
virtual void OnAddToTargetPartObject(Entity* target) override;
virtual void OnRemoveFromTargetPartObject(Entity* target) override;
void SetAiLevel(int ai_level);
void DetachFromMaster();
protected:
virtual void _UpdateMove(int speed) override;
void InternalUpdateMove(float speed);
virtual void RecalcSelfCollider() override;
void BeKill(int killer_id, const std::string& killer_name, int weapon_id);
private:
bool later_removed_ = false;
bool detached_ = false;
friend class HeroAI;
};