Add CMapArea

Former-commit-id: 920fe2cbd9
This commit is contained in:
Henrique Gemignani Passos Lima
2022-12-05 17:43:31 +02:00
parent 5ca5c39db1
commit 1ece642d1b
11 changed files with 402 additions and 27 deletions

View File

@@ -0,0 +1,70 @@
#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

View File

@@ -0,0 +1,51 @@
#ifndef _CMAPPABLEOBJECT
#define _CMAPPABLEOBJECT
#include "MetroidPrime/TGameTypes.hpp"
#include "Kyoto/Math/CTransform4f.hpp"
class CMappableObject {
public:
enum EMappableObjectType {
kMOT_BlueDoor = 0,
kMOT_ShieldDoor = 1,
kMOT_IceDoor = 2,
kMOT_WaveDoor = 3,
kMOT_PlasmaDoor = 4,
kMOT_BigDoor1 = 5,
kMOT_BigDoor2 = 6,
kMOT_IceDoorCeiling = 7,
kMOT_IceDoorFloor = 8,
kMOT_WaveDoorCeiling = 9,
kMOT_WaveDoorFloor = 10,
kMOT_PlasmaDoorCeiling = 11,
kMOT_PlasmaDoorFloor = 12,
kMOT_IceDoorFloor2 = 13,
kMOT_WaveDoorFloor2 = 14,
kMOT_PlasmaDoorFloor2 = 15,
kMOT_DownArrowYellow = 27, /* Maintenance Tunnel */
kMOT_UpArrowYellow = 28, /* Phazon Processing Center */
kMOT_DownArrowGreen = 29, /* Elevator A */
kMOT_UpArrowGreen = 30, /* Elite Control Access */
kMOT_DownArrowRed = 31, /* Elevator B */
kMOT_UpArrowRed = 32, /* Fungal Hall Access */
kMOT_TransportLift = 33,
kMOT_SaveStation = 34,
kMOT_MissileStation = 37
};
enum EVisMode { kVM_Always, kVM_MapStationOrVisit, kVM_Visit, kVM_Never, kVM_MapStationOrVisit2 };
void PostConstruct(const void*);
private:
EMappableObjectType x0_type;
EVisMode x4_visibilityMode;
TEditorId x8_objId;
uint xc_;
CTransform4f x10_transform;
uchar x40_pad[0x10];
};
CHECK_SIZEOF(CMappableObject, 0x50)
#endif // _CMAPPABLEOBJECT

View File

@@ -8,8 +8,10 @@
#include "Kyoto/Audio/CSfxHandle.hpp"
#include "Kyoto/IObjectStore.hpp"
#include "Kyoto/TToken.hpp"
#include "rstl/string.hpp"
#include "rstl/reserved_vector.hpp"
class CMapWorld;
class CModel;
@@ -89,7 +91,9 @@ public:
static void PropogateAreaChain(CGameArea::EOcclusionState occlusionState, CGameArea* area,
CWorld* world);
CGameArea::CConstChainIterator GetChainHead(EChain chain) const { return CGameArea::CConstChainIterator(x4c_chainHeads[size_t(chain)]); }
CGameArea::CConstChainIterator GetChainHead(EChain chain) const {
return CGameArea::CConstChainIterator(x4c_chainHeads[size_t(chain)]);
}
static CGameArea::CConstChainIterator GetAliveAreasEnd();
private:

View File

@@ -88,5 +88,6 @@ private:
CHECK_SIZEOF(CTweakAutoMapper, 0x120)
extern CTweakAutoMapper* gpTweakAutoMapper;
extern "C" int lbl_805A8EB0;
#endif // _CTWEAKAUTOMAPPER