prime/include/MetroidPrime/CMapArea.hpp

71 lines
1.8 KiB
C++

#ifndef _CMAPAREA
#define _CMAPAREA
#include "MetroidPrime/CMappableObject.hpp"
#include "Kyoto/CFactoryMgr.hpp"
#include "Kyoto/Graphics/CColor.hpp"
#include "Kyoto/Math/CAABox.hpp"
#include "Kyoto/Math/CVector3f.hpp"
#include "rstl/single_ptr.hpp"
#include "rstl/vector.hpp"
class IWorld;
class CWorld;
class CMapArea {
public:
class CMapAreaSurface {
friend class CMapArea;
CVector3f x0_normal;
CVector3f xc_centroid;
const int* x18_surfOffset;
const int* x1c_outlineOffset;
public:
explicit CMapAreaSurface(const void* surfBuf);
void PostConstruct(const void* buf);
void Draw(const CVector3f* verts, const CColor& surfColor, const CColor& lineColor,
float lineWidth) const;
void SetupGXMaterial();
const CVector3f& GetNormal() const { return x0_normal; }
const CVector3f& GetCenterPosition() const { return xc_centroid; }
};
enum EVisMode { kVM_Always, kVM_MapStationOrVisit, kVM_Visit, kVM_Never };
CMapArea(CInputStream& in, uint size);
~CMapArea();
void PostConstruct();
bool GetIsVisibleToAutoMapper(bool worldVis, bool areaVis) const;
CVector3f GetAreaCenterPoint() const;
CTransform4f GetAreaPostTransform(const CWorld&, TAreaId);
const CVector3f& GetAreaPostTranslate(const IWorld&, TAreaId);
private:
uint x0_magic;
uint x4_version;
uint x8_;
EVisMode xc_visibilityMode;
CAABox x10_box;
int x28_mappableObjCount;
int x2c_vertexCount;
int x30_surfaceCount;
uint x34_size;
CMappableObject* x38_moStart;
CVector3f* x3c_vertexStart;
CMapAreaSurface* x40_surfaceStart;
rstl::single_ptr< u8 > x44_buf;
static int gUsedMemory;
};
CFactoryFnReturn FMapAreaFactory(const SObjectTag& objTag, CInputStream& in,
const CVParamTransfer&);
#endif // _CMAPAREA