mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
127 lines
4.4 KiB
C
127 lines
4.4 KiB
C
#ifndef J2DINDBLOCK_H
|
|
#define J2DINDBLOCK_H
|
|
|
|
#include "types.h"
|
|
#include "JSystem/J3D/J3DTypes.h"
|
|
#include "dolphin/gx.h"
|
|
|
|
typedef float Mtx23[2][3];
|
|
|
|
struct J2DIndTexCoordScaleInfo
|
|
{
|
|
|
|
GXIndTexScale getScaleS() const { return (GXIndTexScale)mScaleS; }
|
|
GXIndTexScale getScaleT() const { return (GXIndTexScale)mScaleT; }
|
|
|
|
u8 mScaleS; // _00
|
|
u8 mScaleT; // _01
|
|
};
|
|
|
|
/**
|
|
* @size{0x2}
|
|
*/
|
|
struct J2DIndTexCoordScale
|
|
{
|
|
J2DIndTexCoordScale();
|
|
|
|
~J2DIndTexCoordScale() {}
|
|
|
|
void load(u8);
|
|
|
|
J2DIndTexCoordScaleInfo mScaleInfo; // _00
|
|
};
|
|
|
|
struct J2DIndTexMtxInfo
|
|
{
|
|
Mtx23 mMtx; // _00
|
|
s8 mScale; // _18
|
|
};
|
|
|
|
/**
|
|
* @size{0x1C}
|
|
*/
|
|
struct J2DIndTexMtx
|
|
{
|
|
J2DIndTexMtx();
|
|
|
|
~J2DIndTexMtx() {}
|
|
|
|
void load(u8);
|
|
|
|
J2DIndTexMtxInfo mMtxInfo; // _00
|
|
};
|
|
|
|
extern J2DIndTexMtxInfo j2dDefaultIndTexMtxInfo;
|
|
|
|
/**
|
|
* @size{0x2}
|
|
*/
|
|
struct J2DIndTexOrder
|
|
{
|
|
J2DIndTexOrder();
|
|
void load(u8);
|
|
|
|
u8 mCoord; // _00
|
|
u8 mMap; // _01
|
|
};
|
|
|
|
struct J2DIndBlock
|
|
{
|
|
virtual void initialize() {} // _08 (weak)
|
|
virtual void setGX() {} // _0C (weak)
|
|
virtual u32 getType() = 0; // _10
|
|
virtual void setIndTexStageNum(u8 texStageNum) {} // _14 (weak)
|
|
virtual u8 getIndTexStageNum() const { return 0; } // _18 (weak)
|
|
virtual void setIndTexOrder(unsigned long index, J2DIndTexOrder order) {} // _1C (weak)
|
|
virtual J2DIndTexOrder *getIndTexOrder(unsigned long index) { return nullptr; } // _20 (weak)
|
|
virtual void setIndTexMtx(unsigned long index, J2DIndTexMtx texMtx) {} // _24 (weak)
|
|
virtual J2DIndTexMtx *getIndTexMtx(unsigned long index) { return nullptr; } // _28 (weak)
|
|
virtual void setIndTexCoordScale(unsigned long index, J2DIndTexCoordScale scale) {} // _2C (weak)
|
|
virtual J2DIndTexCoordScale *getIndTexCoordScale(unsigned long index) { return nullptr; } // _30 (weak)
|
|
virtual ~J2DIndBlock() {} // _34 (weak)
|
|
|
|
// _00 VTBL
|
|
};
|
|
|
|
struct J2DIndBlockNull : public J2DIndBlock
|
|
{
|
|
inline J2DIndBlockNull()
|
|
: J2DIndBlock()
|
|
{
|
|
}
|
|
|
|
virtual void setGX(); // _0C (weak)
|
|
virtual u32 getType(); // _10 (weak)
|
|
virtual ~J2DIndBlockNull(); // _34 (weak)
|
|
};
|
|
|
|
struct J2DIndBlockFull : public J2DIndBlock
|
|
{
|
|
inline J2DIndBlockFull()
|
|
: J2DIndBlock(), mTexOrders(), mTexMtxes(), mTexCoordScales()
|
|
{
|
|
initialize();
|
|
}
|
|
|
|
virtual void initialize(); // _08
|
|
virtual void setGX(); // _0C
|
|
virtual u32 getType() { return JBT_IndFull; } // _10 (weak)
|
|
virtual void setIndTexStageNum(u8 texStageNum) { mTexStageNum = texStageNum; } // _14 (weak)
|
|
virtual u8 getIndTexStageNum() const { return mTexStageNum; } // _18 (weak)
|
|
virtual void setIndTexOrder(unsigned long index, J2DIndTexOrder order) { mTexOrders[index] = order; } // _1C (weak)
|
|
virtual J2DIndTexOrder *getIndTexOrder(unsigned long index) { return mTexOrders + index; } // _20 (weak)
|
|
virtual void setIndTexMtx(unsigned long, J2DIndTexMtx); // _24 (weak)
|
|
virtual J2DIndTexMtx *getIndTexMtx(unsigned long index) { return mTexMtxes + index; } // _28 (weak)
|
|
virtual void setIndTexCoordScale(unsigned long index, J2DIndTexCoordScale scale) { mTexCoordScales[index] = scale; } // _2C (weak)
|
|
virtual J2DIndTexCoordScale *getIndTexCoordScale(unsigned long index) { return mTexCoordScales + index; } // _30 (weak)
|
|
virtual ~J2DIndBlockFull() {} // _34 (weak)
|
|
|
|
u8 mTexStageNum; // _04
|
|
J2DIndTexOrder mTexOrders[4]; // _05
|
|
u32 : 0;
|
|
J2DIndTexMtx mTexMtxes[3]; // _10
|
|
J2DIndTexCoordScale mTexCoordScales[4]; // _64
|
|
};
|
|
|
|
#endif
|