Files
tp/include/JSystem/J3DGraphAnimator/J3DModel.h
T

129 lines
4.2 KiB
C++
Raw Normal View History

2021-03-28 22:49:05 +02:00
#ifndef J3DMODEL_H
#define J3DMODEL_H
2020-12-25 18:03:10 -08:00
2021-10-11 09:38:53 -07:00
#include "JSystem/J3DGraphAnimator/J3DSkinDeform.h"
#include "JSystem/J3DGraphBase/J3DPacket.h"
#include <dolphin/types.h>
2020-12-25 18:03:10 -08:00
2021-10-11 09:38:53 -07:00
enum J3DMdlFlag {
2025-09-04 07:56:59 -07:00
J3DMdlFlag_None = 0x0,
/* 0x00001 */ J3DMdlFlag_Unk1 = 0x1,
/* 0x00002 */ J3DMdlFlag_UseDefaultJ3D = 0x2,
/* 0x00004 */ J3DMdlFlag_SkinPosCpu = 0x4,
/* 0x00008 */ J3DMdlFlag_SkinNrmCpu = 0x8,
/* 0x00010 */ J3DMdlFlag_EnableLOD = 0x10,
/* 0x20000 */ J3DMdlFlag_UseSharedDL = 0x20000,
/* 0x40000 */ J3DMdlFlag_UseSingleDL = 0x40000,
/* 0x80000 */ J3DMdlFlag_DifferedDLBuffer = 0x80000,
};
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
2021-12-06 06:51:53 -05:00
struct J3DUnkCalc1 {
virtual void calc(J3DModel* model);
};
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
2021-12-06 06:51:53 -05:00
struct J3DUnkCalc2 {
virtual void unk();
virtual void calc(J3DModelData* mpModelData);
};
typedef void (*J3DCalcCallBack)(J3DModel*, u32 timing);
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
class J3DModel {
public:
J3DModel() {
initialize();
}
2025-09-04 07:56:59 -07:00
J3DModel(J3DModelData* pModelData, u32 mdlFlags, u32 mtxBufferFlag) {
2023-08-27 20:09:20 -07:00
initialize();
2025-09-04 07:56:59 -07:00
entryModelData(pModelData, mdlFlags, mtxBufferFlag);
2023-08-27 20:09:20 -07:00
}
2025-11-30 14:23:42 -08:00
void initialize();
s32 entryModelData(J3DModelData*, u32, u32);
s32 createShapePacket(J3DModelData*);
s32 createMatPacket(J3DModelData*, u32);
s32 newDifferedDisplayList(u32);
void lock();
void unlock();
void diff();
s32 setDeformData(J3DDeformData*, u32);
s32 setSkinDeform(J3DSkinDeform*, u32);
void calcAnmMtx();
void calcWeightEnvelopeMtx();
void calcNrmMtx();
void calcBumpMtx();
void calcBBoardMtx();
void prepareShapePackets();
2025-09-04 07:56:59 -07:00
void ptrToIndex();
void makeDL();
2025-11-30 14:23:42 -08:00
virtual void update();
virtual void entry();
virtual void calc();
virtual void calcMaterial();
virtual void calcDiffTexMtx();
virtual void viewCalc();
virtual ~J3DModel() {}
2021-10-11 09:38:53 -07:00
J3DModelData* getModelData() { return mModelData; }
2021-12-06 06:51:53 -05:00
2021-10-11 09:38:53 -07:00
void onFlag(u32 flag) { mFlags |= flag; }
void offFlag(u32 flag) { mFlags &= ~flag; }
bool checkFlag(u32 flag) const { return (mFlags & flag) ? true : false; }
2022-12-31 14:17:26 -08:00
bool isCpuSkinningOn() const { return (mFlags & J3DMdlFlag_SkinPosCpu) && (mFlags & J3DMdlFlag_SkinNrmCpu); }
2021-11-10 23:54:31 -08:00
Mtx& getBaseTRMtx() { return mBaseTransformMtx; }
2024-03-19 04:31:53 -07:00
void setBaseTRMtx(Mtx m) { MTXCopy(m, mBaseTransformMtx); }
2025-09-04 07:56:59 -07:00
u32 getMtxCalcMode() { return mFlags & (J3DMdlFlag_Unk1 | J3DMdlFlag_UseDefaultJ3D); }
2025-04-16 00:09:31 +03:00
J3DVertexBuffer* getVertexBuffer() { return (J3DVertexBuffer*)&mVertexBuffer; }
J3DMatPacket* getMatPacket(u16 idx) const { return &mMatPacket[idx]; }
2021-12-06 06:51:53 -05:00
J3DShapePacket* getShapePacket(u16 idx) const { return &mShapePacket[idx]; }
2025-09-04 07:56:59 -07:00
J3DMtxBuffer* getMtxBuffer() { return mMtxBuffer; }
2023-10-10 13:40:37 -07:00
void setScaleFlag(int idx, u8 flag) { mMtxBuffer->setScaleFlag(idx, flag); }
2025-09-04 07:56:59 -07:00
Mtx33* getBumpMtxPtr(int idx) { return mMtxBuffer->getBumpMtxPtr(idx); }
Mtx33* getNrmMtxPtr() { return mMtxBuffer->getNrmMtxPtr(); }
Mtx* getDrawMtxPtr() { return mMtxBuffer->getDrawMtxPtr(); }
2022-01-25 12:24:14 -08:00
void setBaseScale(const Vec& scale) { mBaseScale = scale; }
2025-09-16 07:31:37 -07:00
void setUserArea(uintptr_t area) { mUserArea = area; }
uintptr_t getUserArea() const { return mUserArea; }
Vec* getBaseScale() { return &mBaseScale; }
2024-03-19 04:31:53 -07:00
void setAnmMtx(int jointNo, Mtx m) { mMtxBuffer->setAnmMtx(jointNo, m); }
MtxP getAnmMtx(int jointNo) { return mMtxBuffer->getAnmMtx(jointNo); }
2025-09-04 07:56:59 -07:00
MtxP getWeightAnmMtx(int i) { return mMtxBuffer->getWeightAnmMtx(i); }
2025-07-10 19:16:30 -04:00
J3DSkinDeform* getSkinDeform() { return mSkinDeform; }
/* 0x04 */ J3DModelData* mModelData;
/* 0x08 */ u32 mFlags;
2021-12-06 06:51:53 -05:00
/* 0x0C */ u32 mDiffFlag;
/* 0x10 */ J3DCalcCallBack mCalcCallBack;
2025-09-16 07:31:37 -07:00
/* 0x14 */ uintptr_t mUserArea;
/* 0x18 */ Vec mBaseScale;
/* 0x24 */ Mtx mBaseTransformMtx;
/* 0x54 */ Mtx mInternalView;
/* 0x84 */ J3DMtxBuffer* mMtxBuffer;
2021-10-11 09:38:53 -07:00
/* 0x88 */ J3DVertexBuffer mVertexBuffer;
/* 0xC0 */ J3DMatPacket* mMatPacket;
2021-12-06 06:51:53 -05:00
/* 0xC4 */ J3DShapePacket* mShapePacket;
/* 0xC8 */ J3DDeformData* mDeformData;
/* 0xCC */ J3DSkinDeform* mSkinDeform;
/* 0xD0 */ J3DVtxColorCalc* mVtxColorCalc;
2021-12-06 06:51:53 -05:00
/* 0xD4 */ J3DUnkCalc1* mUnkCalc1;
/* 0xD8 */ J3DUnkCalc2* mUnkCalc2;
};
2021-03-28 22:49:05 +02:00
#endif /* J3DMODEL_H */