mirror of
https://github.com/doldecomp/sms.git
synced 2026-11-09 09:59:44 -10:00
165 lines
4.0 KiB
C++
165 lines
4.0 KiB
C++
#ifndef MAP_MAP_COLLISION_ENTRY_HPP
|
|
#define MAP_MAP_COLLISION_ENTRY_HPP
|
|
|
|
#include <dolphin/types.h>
|
|
#include <dolphin/mtx.h>
|
|
#include <JSystem/JGeometry.hpp>
|
|
#include <MarioUtil/MathUtil.hpp>
|
|
#include <dolphin/types.h>
|
|
|
|
class TLiveActor;
|
|
class TBGCheckData;
|
|
|
|
class TMapCollisionBase {
|
|
public:
|
|
TMapCollisionBase();
|
|
|
|
virtual void init(const char* col_file_path, u16, const TLiveActor*);
|
|
virtual void moveSRT(const JGeometry::TVec3<f32>& trans,
|
|
const JGeometry::TVec3<f32>& rot,
|
|
const JGeometry::TVec3<f32>& scale)
|
|
{
|
|
}
|
|
virtual void moveTrans(const JGeometry::TVec3<f32>& trans) { }
|
|
virtual void moveMtx(MtxPtr mtx) { }
|
|
virtual void setUp() { offFlag(FLAG_NEEDS_SETUP); }
|
|
virtual void setUpTrans(const JGeometry::TVec3<f32>& param_1)
|
|
{
|
|
MsMtxSetTRS(mTransformMtx, param_1, (Vec) { 0.0f, 0.0f, 0.0f },
|
|
(Vec) { 1.0f, 1.0f, 1.0f });
|
|
setUp();
|
|
}
|
|
virtual void remove() { onFlag(FLAG_NEEDS_SETUP); }
|
|
|
|
void setMtx(MtxPtr mtx) { MTXCopy(mtx, mTransformMtx); }
|
|
void setAllActor(const TLiveActor*);
|
|
void setAllData(s16);
|
|
void setAllBGType(u16);
|
|
void setVertexData(u32, const JGeometry::TVec3<f32>&,
|
|
const JGeometry::TVec3<f32>&,
|
|
const JGeometry::TVec3<f32>&);
|
|
void initCheckData(s16, u16, const TLiveActor*);
|
|
void initAllCheckData(s16, const f32*, u16, const TLiveActor*);
|
|
void update();
|
|
void updateCheckData(const f32*);
|
|
void updateVertexPos(f32*);
|
|
void updateTrans(const JGeometry::TVec3<f32>& trans);
|
|
void setCheckData(const f32*, const s16*, TBGCheckData*, int);
|
|
bool isSetUp() const
|
|
{
|
|
if (checkFlag(FLAG_NEEDS_SETUP))
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
// fabricated
|
|
bool checkFlag(u16 flag) const
|
|
{
|
|
if (mFlags & flag)
|
|
return true;
|
|
return false;
|
|
}
|
|
void onFlag(u16 flag) { mFlags |= flag; }
|
|
void offFlag(u16 flag) { mFlags &= ~flag; }
|
|
s32 getKind() const { return mKind; }
|
|
u32 getCheckDataNum() const { return mCheckDataNum; }
|
|
void setUpMtx(MtxPtr mtx)
|
|
{
|
|
setMtx(mtx);
|
|
setUp();
|
|
}
|
|
|
|
enum {
|
|
KIND_STATIC = 0,
|
|
KIND_MOVE = 1,
|
|
KIND_WARP = 2,
|
|
};
|
|
|
|
enum {
|
|
FLAG_NEEDS_SETUP = 0x1,
|
|
FLAG_UNK4000 = 0x4000,
|
|
FLAG_UNK8000 = 0x8000,
|
|
};
|
|
|
|
protected:
|
|
/* 0x4 */ TBGCheckData* mCheckDatas;
|
|
/* 0x8 */ s32 mKind;
|
|
/* 0xC */ u32 mCheckDataNum;
|
|
/* 0x10 */ u32 mVertexNum;
|
|
/* 0x14 */ Vec* mVertices;
|
|
|
|
enum {
|
|
HAS_ADDITIONAL_DATA = 0x1,
|
|
WAS_PATCHED = 0x8000,
|
|
};
|
|
|
|
struct TMapCollisionGroup {
|
|
/* 0x0 */ u16 mBGType;
|
|
/* 0x2 */ s16 mTriangleNum;
|
|
/* 0x4 */ u16 mFlags;
|
|
/* 0x8 */ s16* mIndices;
|
|
/* 0xC */ u8* mSoundMaterials;
|
|
/* 0x10 */ u8* unk10;
|
|
/* 0x14 */ s16* mAdditionalDatas;
|
|
};
|
|
|
|
/* 0x18 */ u32 mCollisionGroupNum;
|
|
/* 0x1C */ TMapCollisionGroup* mCollisionGroups;
|
|
/* 0x20 */ Mtx mTransformMtx;
|
|
/* 0x50 */ JGeometry::TVec3<f32> mPrevTranslation;
|
|
/* 0x5C */ u16 mFlags;
|
|
};
|
|
|
|
class TMapCollisionStatic : public TMapCollisionBase {
|
|
public:
|
|
TMapCollisionStatic();
|
|
|
|
virtual void init(const char* col_file_path, u16, const TLiveActor*);
|
|
virtual void setUp();
|
|
virtual void remove() { }
|
|
|
|
private:
|
|
/* 0x60 */ const TLiveActor* mOwnerActor;
|
|
};
|
|
|
|
class TMapCollisionWarp : public TMapCollisionBase {
|
|
public:
|
|
TMapCollisionWarp();
|
|
|
|
virtual void init(const char* col_file_path, u16, const TLiveActor*);
|
|
virtual void setUp();
|
|
virtual void setUpTrans(const JGeometry::TVec3<f32>&);
|
|
virtual void remove();
|
|
|
|
private:
|
|
/* 0x60 */ u16 mEntryId;
|
|
/* 0x64 */ u32 mEntrySize;
|
|
};
|
|
|
|
class TMapCollisionMove : public TMapCollisionBase {
|
|
public:
|
|
TMapCollisionMove();
|
|
|
|
virtual void init(const char* col_file_path, u16, const TLiveActor*);
|
|
virtual void moveSRT(const JGeometry::TVec3<f32>& trans,
|
|
const JGeometry::TVec3<f32>& rot,
|
|
const JGeometry::TVec3<f32>& scale)
|
|
{
|
|
MsMtxSetTRS(mTransformMtx, trans, rot, scale);
|
|
move();
|
|
}
|
|
virtual void moveTrans(const JGeometry::TVec3<f32>& trans);
|
|
virtual void moveMtx(MtxPtr mtx)
|
|
{
|
|
MTXCopy(mtx, mTransformMtx);
|
|
move();
|
|
}
|
|
|
|
void init(u32 check_data_num, u16 bg_type, s16 data,
|
|
const TLiveActor* actor);
|
|
void move();
|
|
void setList();
|
|
};
|
|
|
|
#endif
|