71 lines
2.1 KiB
C++
71 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include "entity.h"
|
|
|
|
class Room;
|
|
class Creature;
|
|
class Human;
|
|
class Bullet;
|
|
class RoomObstacle;
|
|
class MapService;
|
|
class Obstacle : public Entity
|
|
{
|
|
public:
|
|
const mt::MapThing* meta = nullptr;
|
|
MapService* permanent_map_service = nullptr;
|
|
bool is_permanent = false;
|
|
float scale = 1.0f;
|
|
int dead_reason = 0;
|
|
|
|
virtual ~Obstacle() 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 bool IsDead(Room* room) override;
|
|
virtual long long GetDeadFrameNo(Room* room) override;
|
|
virtual void OnBulletHit(IBullet* bullet) override;
|
|
virtual void OnExplosionHit(Explosion* explosion) override;
|
|
virtual bool Attackable(Room* room) override;
|
|
virtual bool CanThroughable(Creature* c);
|
|
virtual bool CanThroughable(IBullet* bullet);
|
|
virtual bool DoInteraction(Human* sender);
|
|
virtual bool CanSeeMe(Human* hum);
|
|
virtual bool ReceiveExplosionDmg(Explosion* explosion) override;
|
|
virtual void SetRotate(float rotate);
|
|
float GetRotate() { return rotate_; }
|
|
float GetHealth(Room* room);
|
|
void SetHealth(Room* room, float value);
|
|
virtual void Die(Room* room);
|
|
int GetTeamId(Room* room);
|
|
void SetTeamId(Room* room, int team_id);
|
|
int GetMasterId(Room* room);
|
|
void SetMasterId(Room* room, int master_id);
|
|
bool IsPermanent();
|
|
bool Throughable();
|
|
bool IsTouchInteraction();
|
|
bool IsOpenInteraction();
|
|
bool IsRoomObstacle();
|
|
RoomObstacle* AsRoomObstacle();
|
|
|
|
protected:
|
|
Obstacle();
|
|
void DoHideHouseInteraction(Human* sender);
|
|
std::tuple<long long, glm::vec3>* GetInteractionData(Human* sender);
|
|
void AddObstacleBuff(Creature* c);
|
|
void ClearObstacleBuff(Creature* c);
|
|
void ProcDieExplosion(Room* room);
|
|
|
|
protected:
|
|
float health_ = 0.0f;
|
|
bool dead_ = false;
|
|
long long dead_frameno_ = 0;
|
|
|
|
int team_id_ = 0;
|
|
int master_id_ = 0;
|
|
|
|
float rotate_ = 0;
|
|
|
|
friend class EntityFactory;
|
|
friend class PBUtils;
|
|
};
|