aozhiwei d19d911ce8 1
2023-11-14 13:09:45 +08:00

86 lines
2.9 KiB
C++

#pragma once
#include "weakptr.h"
namespace cs
{
class MFObjectPart;
class MFObjectFull;
}
class Room;
class Human;
class Explosion;
class Loot;
class Car;
class RoomObstacle;
class Entity
{
public:
bool removing = false;
long long delete_frameno = 0;
Entity();
virtual ~Entity();
virtual void Initialize();
virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) {};
virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) {};
virtual float GetRadius() { return 0;};
virtual float GetHitRadius() { return GetRadius();};
virtual bool IsDead(Room* room) { return false;};
virtual bool IsCreature(Room* room) { return false;};
virtual bool IsLoot() { return false;};
virtual bool IsCar() { return false;};
virtual bool IsRoomObstacle() { return false;};
virtual Loot* AsLoot() { return nullptr;};
virtual Car* AsCar() { return nullptr;};
virtual RoomObstacle* AsRoomObstacle() { return nullptr;};
virtual long long GetDeadFrameNo(Room* room) { return 0;};
virtual void OnBulletHit(IBullet* bullet) {};
virtual void OnExplosionHit(Explosion* explosion) {};
virtual void OnAddToTargetPartObject(Entity* target) {};
virtual void OnRemoveFromTargetPartObject(Entity* target) {};
virtual void OnBattleStart(Room* room) {};
virtual bool CanSeeMe(Human* hum) { return true; };
virtual bool Attackable(Room* room) { return false; };
virtual bool ReceiveExplosionDmg(Explosion* explosion) { return false; };
virtual std::string GetName() { return "";};
int GetUniId() const { return uniid_; }
EntityType_e GetEntityType() const { return entity_type_; }
EntitySubType_e GetEntitySubType() const { return entity_subtype_; }
virtual bool IsEntityType(EntityType_e type) const { return type == entity_type_;}
virtual bool IsEntitySubType(EntitySubType_e subtype) const
{ return subtype == entity_subtype_;}
int GetGridId() const { return grid_id_; }
void BroadcastFullState(Room* room);
void BroadcastDeleteState(Room* room);
void RemoveFromAroundPlayers(Room* room);
virtual const Position& GetPos() { return pos_; };
Position& GetMutablePos() { return pos_; };
virtual void SetPos(Position pos) { pos_ = pos; }
EntityWeakPtrChunk* GetEntityWeakPtrChunk() { return &entity_weak_ptr_chunk_; };
EntityWeakPtr AllocEntityWeakPtr();
EntityWeakPtr& GetEntityWeakPtrRef();
bool IsClientCached(Human* hum);
bool CanClientCache(Human* hum);
protected:
void AddClientCache(Human* hum);
private:
void SetGridId(int grid_id) { grid_id_ = grid_id; }
private:
int uniid_ = 0;
EntityType_e entity_type_ = ET_None;
EntitySubType_e entity_subtype_ = EST_None;
EntityWeakPtr entity_weak_ptr_;
EntityWeakPtrChunk entity_weak_ptr_chunk_;
Position pos_;
int grid_id_ = 0;
friend class EntityFactory;
friend class GridService;
};