NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
g3d_calcworld.h
1#ifndef NW4R_G3D_CALC_WORLD_H
2#define NW4R_G3D_CALC_WORLD_H
3#include <nw4r/types_nw4r.h>
4
5#include <nw4r/g3d/g3d_scnobj.h>
6#include <nw4r/g3d/res/g3d_resmdl.h>
7
8#include <nw4r/math.h>
9
10namespace nw4r {
11namespace g3d {
12
13// Forward declarations
14class AnmObjChr;
15struct ChrAnmResult;
17class WorldMtxManip;
18
19/******************************************************************************
20 *
21 * Functions
22 *
23 ******************************************************************************/
24void CalcWorld(math::MTX34* pModelMtxArray, ulong* pModelMtxAttribArray,
25 const u8* pByteCode, const math::MTX34* pBaseMtx, ResMdl mdl,
26 AnmObjChr* pAnmChr, FuncObjCalcWorld* pFuncObj, ulong rootAttrib);
27
28void CalcWorld(math::MTX34* pModelMtxArray, ulong* pModelMtxAttribArray,
29 const u8* pByteCode, const math::MTX34* pBaseMtx, ResMdl mdl,
30 AnmObjChr* pAnmChr, FuncObjCalcWorld* pFuncObj);
31
32void CalcSkinning(math::MTX34* pModelMtxArray, ulong* pModelMtxAttribArray,
33 const ResMdl mdl, const u8* pByteCode);
34
35/******************************************************************************
36 *
37 * ICalcWorldCallback
38 *
39 ******************************************************************************/
41public:
42 virtual ~ICalcWorldCallback() = 0; // at 0x8
43
44 virtual void ExecCallbackA(ChrAnmResult* pResult, ResMdl mdl,
45 FuncObjCalcWorld* pFuncObj) = 0; // at 0xC
46
47 virtual void ExecCallbackB(WorldMtxManip* pManip, ResMdl mdl,
48 FuncObjCalcWorld* pFuncObj) = 0; // at 0x10
49
50 virtual void ExecCallbackC(math::MTX34* pMtxArray, ResMdl mdl,
51 FuncObjCalcWorld* pFuncObj) = 0; // at 0x14
52};
53
54/******************************************************************************
55 *
56 * WorldMtxManip
57 *
58 ******************************************************************************/
59class WorldMtxManip {
60public:
61 WorldMtxManip(math::MTX34* pM, math::VEC3* pS, ulong* pWMAttr)
62 : mpM(pM), mpS(pS), mpWMAttr(pWMAttr) {}
63
64private:
65 math::MTX34* mpM; // at 0x0
66 math::VEC3* mpS; // at 0x4
67 ulong* mpWMAttr; // at 0x8
68};
69
70/******************************************************************************
71 *
72 * FuncObjCalcWorld
73 *
74 ******************************************************************************/
75class FuncObjCalcWorld {
76public:
77 FuncObjCalcWorld(ICalcWorldCallback* pCallback, ulong timing, ulong nodeID)
78 : mpCallback(pCallback), mTiming(timing), mNodeID(nodeID) {}
79
80 ~FuncObjCalcWorld() {}
81
82 void CheckCallbackA(ulong nodeID, ChrAnmResult* pResult, ResMdl mdl) {
83 if (nodeID == mNodeID && (mTiming & ScnObj::CALLBACK_TIMING_A)) {
84 mpCallback->ExecCallbackA(pResult, mdl, this);
85 }
86 }
87
88 void CheckCallbackB(ulong nodeID, math::MTX34* pM, math::VEC3* pS,
89 ulong* pWMAttr, ResMdl mdl) {
90
91 if (nodeID == mNodeID && (mTiming & ScnObj::CALLBACK_TIMING_B)) {
92 WorldMtxManip manip(pM, pS, pWMAttr);
93 mpCallback->ExecCallbackB(&manip, mdl, this);
94 }
95 }
96
97 void CheckCallbackC(math::MTX34* pMtxArray, ResMdl mdl) {
98 if (mTiming & ScnObj::CALLBACK_TIMING_C) {
99 mpCallback->ExecCallbackC(pMtxArray, mdl, this);
100 }
101 }
102
103 u16 GetNodeID() const { return mNodeID; }
104 void SetNodeID(u16 nodeID) { mNodeID = nodeID; }
105
106private:
107 ICalcWorldCallback* mpCallback; // at 0x0
108 u8 mTiming; // at 0x4
109 u8 PADDING_0x5; // at 0x5
110 u16 mNodeID; // at 0x6
111};
112
113} // namespace g3d
114} // namespace nw4r
115
116#endif
3D graphics drawing library.
Definition g3d_3dsmax.h:10