NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
g3d_scnproc.h
1#ifndef NW4R_G3D_SCN_PROC_H
2#define NW4R_G3D_SCN_PROC_H
3#include <nw4r/types_nw4r.h>
4
5#include <nw4r/g3d/g3d_scnobj.h>
6
7namespace nw4r {
8namespace g3d {
9
10class ScnProc : public ScnLeaf {
11public:
12 typedef void (*DrawProc)(ScnProc* pProc, bool opa);
13
14public:
15 static ScnProc* Construct(MEMAllocator* pAllocator, size_t* pSize,
16 DrawProc pProc, bool opa, bool xlu, size_t userData);
17
18 ScnProc(MEMAllocator* pAllocator, DrawProc pProc, void* pUserData, bool opa,
19 bool xlu)
20 : ScnLeaf(pAllocator),
21 mFlag(0),
22 mpDrawProc(pProc),
23 mpUserData(pUserData) {
24
25 if (opa) {
26 mFlag |= SCNPROCFLAG_DRAW_OPA;
27 }
28
29 if (xlu) {
30 mFlag |= SCNPROCFLAG_DRAW_XLU;
31 }
32 }
33
34 virtual void G3dProc(ulong task, ulong param, void* pInfo); // at 0xC
35 virtual ~ScnProc() {} // at 0x10
36
37 void SetDrawProc(DrawProc pProc, bool opa, bool xlu) {
38 mpDrawProc = pProc;
39
40 if (opa) {
41 mFlag |= SCNPROCFLAG_DRAW_OPA;
42 } else {
43 mFlag &= ~SCNPROCFLAG_DRAW_OPA;
44 }
45
46 if (xlu) {
47 mFlag |= SCNPROCFLAG_DRAW_XLU;
48 } else {
49 mFlag &= ~SCNPROCFLAG_DRAW_XLU;
50 }
51 }
52
53 void SetUserData(void* pData) {
54 mpUserData = pData;
55 }
56 void* GetUserData() {
57 return mpUserData;
58 }
59
60private:
61 enum ScnProcFlag {
62 SCNPROCFLAG_DRAW_OPA = (1 << 0),
63 SCNPROCFLAG_DRAW_XLU = (1 << 1)
64 };
65
66private:
67 ulong mFlag; // at 0xE8
68 DrawProc mpDrawProc; // at 0xEC
69 void* mpUserData; // at 0xF0
70
71 NW4R_G3D_RTTI_DECL_DERIVED(ScnProc, ScnLeaf);
72};
73
74} // namespace g3d
75} // namespace nw4r
76
77#endif
3D graphics drawing library.
Definition g3d_3dsmax.h:10