#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); bool IsDestorying() { return destorying_; }; void SetDestorying() { destorying_ = true;}; protected: void AddClientCache(Human* hum); private: void SetGridId(int grid_id) { grid_id_ = grid_id; } private: int uniid_ = 0; bool destorying_ = false; 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; };