Files
Petari/include/Game/Map/CollisionCode.hpp
2026-09-21 14:35:21 -04:00

131 lines
3.5 KiB
C++

#pragma once
#include <revolution/types.h>
class CodeTable;
class JMapInfoIter;
class Triangle;
enum CollisionFloorCode {
CollisionFloorCode_Normal,
CollisionFloorCode_Death,
CollisionFloorCode_Slip,
CollisionFloorCode_NoSlip,
CollisionFloorCode_DamageNormal,
CollisionFloorCode_Ice,
CollisionFloorCode_JumpLow,
CollisionFloorCode_JumpMiddle,
CollisionFloorCode_JumpHigh,
CollisionFloorCode_Slider,
CollisionFloorCode_DamageFire,
CollisionFloorCode_JumpNormal,
CollisionFloorCode_FireDance,
CollisionFloorCode_Sand,
CollisionFloorCode_Glass,
CollisionFloorCode_DamageElectric,
CollisionFloorCode_PullBack,
CollisionFloorCode_Sink,
CollisionFloorCode_SinkPoison,
CollisionFloorCode_Slide,
CollisionFloorCode_WaterBottomH,
CollisionFloorCode_WaterBottomM,
CollisionFloorCode_WaterBottomL,
CollisionFloorCode_Wet,
CollisionFloorCode_Needle,
CollisionFloorCode_SinkDeath,
CollisionFloorCode_Snow,
CollisionFloorCode_RailMove,
CollisionFloorCode_AreaMove,
CollisionFloorCode_Press,
CollisionFloorCode_NoStampSand,
CollisionFloorCode_SinkDeathMud,
CollisionFloorCode_Brake,
CollisionFloorCode_GlassIce,
CollisionFloorCode_JumpParasol,
CollisionFloorCode_End,
};
enum CollisionWallCode {
CollisionWallCode_Normal,
CollisionWallCode_NotWallJump,
CollisionWallCode_NotWallSlip,
CollisionWallCode_NotGrab,
CollisionWallCode_GhostThroughCode,
CollisionWallCode_NotSideStep,
CollisionWallCode_Rebound,
CollisionWallCode_Fur,
CollisionWallCode_NoAction,
CollisionWallCode_End,
};
enum CollisionSoundCode {
CollisionSoundCode_Null,
CollisionSoundCode_Soil,
CollisionSoundCode_Lawn,
CollisionSoundCode_Stone,
CollisionSoundCode_Marble,
CollisionSoundCode_WoodThick,
CollisionSoundCode_WoodThin,
CollisionSoundCode_Metal,
CollisionSoundCode_Snow,
CollisionSoundCode_Ice,
CollisionSoundCode_Shallow,
CollisionSoundCode_Sand,
CollisionSoundCode_Beach,
CollisionSoundCode_Carpet,
CollisionSoundCode_Mud,
CollisionSoundCode_Honey,
CollisionSoundCode_End,
};
enum CollisionCameraCode {
CollisionCameraCode_NoThrough,
CollisionCameraCode_Through,
CollisionCameraCode_End,
};
class CollisionCode {
public:
/// @brief Creates a new `CollisionCode`.
CollisionCode();
const char* getFloorCodeString(const Triangle& rTriangle);
const char* getWallCodeString(const Triangle& rTriangle);
const char* getSoundCodeString(const Triangle& rTriangle);
const char* getSoundCodeString(const JMapInfoIter& rIter);
u32 getCameraID(const Triangle& rTriangle);
u32 getCode(const JMapInfoIter& rIter, CodeTable* pCodeTable, const char* pName);
void createFloorTable();
void createWallTable();
void createSoundTable();
void createCameraTable();
u32 getFloorCode(const JMapInfoIter& rIter);
u32 getWallCode(const JMapInfoIter& rIter);
u32 getSoundCode(const JMapInfoIter& rIter);
u32 getCameraCode(const JMapInfoIter& rIter);
u32 getCameraID(const JMapInfoIter& rIter);
/* 0x00 */ CodeTable* mFloorTable;
/* 0x04 */ CodeTable* mWallTable;
/* 0x08 */ CodeTable* mSoundTable;
/* 0x0C */ CodeTable* mCameraTable;
};
class CodeTable {
public:
CodeTable(u32 numMax);
void add(const char* pName, u32 code);
const char* getString(u32 code);
/* 0x00 */ u32 mCodeNum;
/* 0x04 */ u32 mCodeNumMax;
/* 0x08 */ u32* mHashTable;
/* 0x0C */ u32* mCodeTable;
/* 0x10 */ const char** mNameTable;
};