NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
g3d_anmtexpat.h
1#ifndef NW4R_G3D_ANM_TEX_PAT_H
2#define NW4R_G3D_ANM_TEX_PAT_H
3#include <nw4r/types_nw4r.h>
4
5#include <nw4r/g3d/g3d_anmobj.h>
6#include <nw4r/g3d/res/g3d_resanmtexpat.h>
7
8namespace nw4r {
9namespace g3d {
10
11void ApplyTexPatAnmResult(ResTexObj texObj, ResTlutObj tlutObj,
12 const TexPatAnmResult* pResult);
13
14/******************************************************************************
15 *
16 * AnmObjTexPat
17 *
18 ******************************************************************************/
19// Forward declarations
20class AnmObjTexPatRes;
21
22class AnmObjTexPat : public AnmObj {
23public:
24 AnmObjTexPat(MEMAllocator* pAllocator, u16* pBindingBuf, int numBinding);
25 virtual void G3dProc(ulong task, ulong param, void* pInfo) = 0; // at 0xC
26 virtual ~AnmObjTexPat() {} // at 0x10
27
28 virtual void SetFrame(f32 frame) = 0; // at 0x1C
29 virtual f32 GetFrame() const = 0; // at 0x20
30 virtual void UpdateFrame() = 0; // at 0x24
31
32 virtual void SetUpdateRate(f32 rate) = 0; // at 0x28
33 virtual f32 GetUpdateRate() const = 0; // at 0x2C
34
35 virtual bool Bind(const ResMdl mdl) = 0; // at 0x30
36 virtual void Release(); // at 0x34
37
38 virtual const TexPatAnmResult* GetResult(TexPatAnmResult* pResult,
39 ulong idx) = 0; // at 0x38
40
41 virtual AnmObjTexPatRes* Attach(int idx, AnmObjTexPatRes* pRes); // at 0x3C
42 virtual AnmObjTexPatRes* Detach(int idx); // at 0x40
43 virtual void DetachAll(); // at 0x44
44
45 bool TestExistence(ulong idx) const;
46 bool TestDefined(ulong idx) const;
47
48protected:
49 enum BindingFlag {
50 BINDING_ID_MASK = (1 << 14) - 1,
51 BINDING_INVALID = (1 << 14),
52 BINDING_UNDEFINED = (1 << 15),
53 };
54
55protected:
56 static const int MAX_CHILD = 4;
57
58protected:
59 int mNumBinding; // at 0x10
60 u16* const mpBinding; // at 0x14
61
62 NW4R_G3D_RTTI_DECL_DERIVED(AnmObjTexPat, AnmObj);
63};
64
65/******************************************************************************
66 *
67 * AnmObjTexPatNode
68 *
69 ******************************************************************************/
70class AnmObjTexPatNode : public AnmObjTexPat {
71public:
72 AnmObjTexPatNode(MEMAllocator* pAllocator, u16* pBindingBuf, int numBinding,
73 AnmObjTexPatRes** ppChildrenBuf, int numChildren);
74 virtual void G3dProc(ulong task, ulong param, void* pInfo); // at 0xC
75 virtual ~AnmObjTexPatNode(); // at 0x10
76
77 virtual void SetFrame(f32 frame); // at 0x1C
78 virtual f32 GetFrame() const; // at 0x20
79 virtual void UpdateFrame(); // at 0x24
80
81 virtual void SetUpdateRate(f32 rate); // at 0x28
82 virtual f32 GetUpdateRate() const; // at 0x2C
83
84 virtual bool Bind(const ResMdl mdl); // at 0x30
85 virtual void Release(); // at 0x34
86
87 virtual AnmObjTexPatRes* Attach(int idx, AnmObjTexPatRes* pRes); // at 0x3C
88 virtual AnmObjTexPatRes* Detach(int idx); // at 0x40
89 virtual void DetachAll(); // at 0x44
90
91 int Size() const { return mChildrenArraySize; }
92 AnmObjTexPatRes* GetChild(int idx) const { return mpChildrenArray[idx]; }
93
94protected:
95 int mChildrenArraySize; // at 0x18
96 AnmObjTexPatRes** mpChildrenArray; // at 0x1C
97
98 NW4R_G3D_RTTI_DECL_DERIVED(AnmObjTexPatNode, AnmObjTexPat);
99};
100
101/******************************************************************************
102 *
103 * AnmObjTexPatOverride
104 *
105 ******************************************************************************/
106class AnmObjTexPatOverride : public AnmObjTexPatNode {
107public:
108 static AnmObjTexPatOverride* Construct(MEMAllocator* pAllocator, size_t* pSize,
109 ResMdl mdl, int numChildren);
110
111 AnmObjTexPatOverride(MEMAllocator* pAllocator, u16* pBindingBuf,
112 int numBinding, AnmObjTexPatRes** ppChildrenBuf,
113 int numChildren)
114 : AnmObjTexPatNode(pAllocator, pBindingBuf, numBinding, ppChildrenBuf,
115 numChildren) {}
116
117 virtual ~AnmObjTexPatOverride() {} // at 0x10
118
119 virtual const TexPatAnmResult* GetResult(TexPatAnmResult* pResult,
120 ulong idx); // at 0x38
121
122 NW4R_G3D_RTTI_DECL_DERIVED(AnmObjTexPatOverride, AnmObjTexPatNode);
123};
124
125/******************************************************************************
126 *
127 * AnmObjTexPatRes
128 *
129 ******************************************************************************/
130class AnmObjTexPatRes : public AnmObjTexPat, protected FrameCtrl {
131public:
132 static AnmObjTexPatRes* Construct(MEMAllocator* pAllocator, size_t* pSize,
133 ResAnmTexPat pat, ResMdl mdl, bool cache);
134
135 AnmObjTexPatRes(MEMAllocator* pAllocator, ResAnmTexPat pat,
136 u16* pBindingBuf, int numBinding,
137 TexPatAnmResult* pCacheBuf);
138 virtual void G3dProc(ulong task, ulong param, void* pInfo); // at 0xC
139 virtual ~AnmObjTexPatRes() {} // at 0x10
140
141 virtual void SetFrame(f32 frame); // at 0x1C
142 virtual f32 GetFrame() const; // at 0x20
143 virtual void UpdateFrame(); // at 0x24
144
145 virtual void SetUpdateRate(f32 rate); // at 0x28
146 virtual f32 GetUpdateRate() const; // at 0x2C
147
148 virtual bool Bind(const ResMdl mdl); // at 0x30
149
150 virtual const TexPatAnmResult* GetResult(TexPatAnmResult* pResult,
151 ulong idx); // at 0x38
152
153 void UpdateCache();
154
155 ResAnmTexPat GetResAnm() {
156 return mRes;
157 }
158
159 void SetPlayPolicy(PlayPolicyFunc pFunc) {
160 FrameCtrl::SetPlayPolicy(pFunc);
161 }
162
163private:
164 ResAnmTexPat mRes; // at 0x2C
165 TexPatAnmResult* const mpResultCache; // at 0x30
166
167 NW4R_G3D_RTTI_DECL_DERIVED(AnmObjTexPatRes, AnmObjTexPat);
168};
169
170} // namespace g3d
171} // namespace nw4r
172
173#endif
3D graphics drawing library.
Definition g3d_3dsmax.h:10