2020-07-07 10:12:33 +08:00

72 lines
2.2 KiB
C++

#pragma once
namespace cs
{
class MFObjectPart;
class MFObjectFull;
}
class Room;
class ColliderComponent;
class AabbCollider;
class CircleCollider;
class Human;
class Entity
{
public:
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 GetSpeed() { return 1.0f;};
virtual void GetAabbBox(AabbCollider& aabb_box);
virtual void GetCircleBox(CircleCollider& circle_box);
virtual bool IsDead(Room* room) { return false;};
virtual long long GetDeadFrameNo(Room* room) { return 0;};
virtual void OnPreCollision(Room* room) {};
int GetEntityUniId() const { return entity_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_; }
bool TestCollision(Room* room, Entity* b);
bool TestCollision(Room* room, ColliderComponent* b);
bool TestCollisionEx(Room* room, const a8::Vec2& aabb_pos, AabbCollider& aabb_box);
void BroadcastFullState(Room* room);
void BroadcastDeleteState(Room* room);
void AddEntityCollider(ColliderComponent* collider);
a8::Vec2 GetPos() { return pos_; };
void SetPos(a8::Vec2 pos) { pos_ = pos; }
float GetX() { return pos_.x; }
float GetY() { return pos_.y; }
void SetX(float x) { pos_.x = x; }
void SetY(float y) { pos_.y = y; }
protected:
bool IsClientCached(Human* hum);
bool CanClientCache(Human* hum);
void AddClientCache(Human* hum);
private:
void ClearColliders();
void SetGridId(int grid_id) { grid_id_ = grid_id; }
protected:
std::list<ColliderComponent*> colliders_;
private:
int entity_uniid_ = 0;
EntityType_e entity_type_ = ET_None;
EntitySubType_e entity_subtype_ = EST_None;
a8::Vec2 pos_;
int grid_id_ = 0;
friend class EntityFactory;
friend class GridService;
};