metaforce/Runtime/AutoMapper/CMappableObject.hpp

72 lines
2.1 KiB
C++

#ifndef __URDE_CMAPPABLEOBJECT_HPP__
#define __URDE_CMAPPABLEOBJECT_HPP__
#include "RetroTypes.hpp"
#include "zeus/CAABox.hpp"
#include "zeus/CTransform.hpp"
namespace urde
{
class CStateManager;
class ITweakAutoMapper;
class CMappableObject
{
public:
enum class EMappableObjectType
{
BlueDoor = 0,
ShieldDoor = 1,
IceDoor = 2,
WaveDoor = 3,
PlasmaDoor = 4,
BigDoor1 = 5,
BigDoor2 = 6,
IceDoorCeiling = 7,
IceDoorFloor = 8,
WaveDoorCeiling = 9,
WaveDoorFloor = 10,
PlasmaDoorCeiling= 11,
PlasmaDoorFloor = 12,
IceDoorFloor2 = 13,
WaveDoorFloor2 = 14,
Fifteen = 15,
DownArrowYellow = 27, /* Maintenance Tunnel */
UpArrowYellow = 28, /* Phazon Processing Center */
DownArrowGreen = 29, /* Elevator A */
UpArrowGreen = 30, /* Elite Control Access */
DownArrowRed = 31, /* Elevator B */
UpArrowRed = 32, /* Fungal Hall Access */
TransportLift = 33,
SaveStation = 34,
MissileStation = 37
};
private:
static const zeus::CVector3f skDoorVerts[8];
EMappableObjectType x0_type;
u32 x4_;
TEditorId x8_;
u32 xc_;
zeus::CTransform x10_transform;
zeus::CTransform AdjustTransformForType();
public:
void PostConstruct(const void*);
const zeus::CTransform& GetTransform() const;
EMappableObjectType GetType() const;
void Draw(int, const CStateManager&, float, bool) const;
void DrawDoorSurface(int, const CStateManager&, float, int, bool) const;
zeus::CVector3f BuildSurfaceCenterPoint(s32) const;
bool IsDoorConnectedToArea(s32, const CStateManager&) const;
bool IsDoorConnectedToVisitedArea(const CStateManager&) const;
bool GetIsVisibleToAutoMapper(bool) const;
bool GetIsSeen() const;
void ReadAutoMapperTweaks(const ITweakAutoMapper&);
static bool GetTweakIsMapVisibilityCheat();
static bool IsDoorType(EMappableObjectType);
};
}
#endif // __URDE_CMAPPABLEOBJECT_HPP__