NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
g3d_resanmlight.h
1#ifndef NW4R_G3D_RES_RES_ANM_LIGHT_H
2#define NW4R_G3D_RES_RES_ANM_LIGHT_H
3#include <nw4r/types_nw4r.h>
4
5#include <nw4r/g3d/res/g3d_resanm.h>
6#include <nw4r/g3d/res/g3d_rescommon.h>
7
8#include <nw4r/math.h>
9#include <nw4r/ut.h>
10
11#include <revolution/GX.h>
12
13namespace nw4r {
14namespace g3d {
15
16// Forward declarations
17struct LightAnmResult;
18
19/******************************************************************************
20 *
21 * Common types
22 *
23 ******************************************************************************/
25 enum LightType {
26 LIGHTTYPE_POINT,
27 LIGHTTYPE_DIRECTIONAL,
28 LIGHTTYPE_SPOT,
29
30 LIGHTTYPE_MAX
31 };
32};
33
34/******************************************************************************
35 *
36 * LightAnmResult
37 *
38 ******************************************************************************/
40 enum Flag {
41 FLAG_LIGHT_TYPE_MASK = (1 << 0) | (1 << 1),
42 FLAG_LIGHT_ENABLE = (1 << 2),
43 FLAG_SPECULAR_ENABLE = (1 << 3),
44 FLAG_COLOR_ENABLE = (1 << 4),
45 FLAG_ALPHA_ENABLE = (1 << 5)
46 };
47
48 ulong specIdx; // at 0x0
49 ulong flags; // at 0x4
50 math::VEC3 pos; // at 0x8
51 math::VEC3 aim; // at 0x14
52 ut::Color color; // at 0x20
53 GXDistAttnFn distFunc; // at 0x24
54 f32 refDistance; // at 0x28
55 f32 refBrightness; // at 0x2C
56 GXSpotFn spotFunc; // at 0x30
57 f32 cutoff; // at 0x34
58 ut::Color specColor; // at 0x38
59 f32 shininess; // at 0x3C
60};
61
62/******************************************************************************
63 *
64 * ResAnmLight
65 *
66 ******************************************************************************/
68 enum Flag {
69 FLAG_LIGHT_TYPE_MASK = (1 << 0) | (1 << 1),
70 FLAG_LIGHT_ENABLE = (1 << 2),
71 FLAG_SPECULAR_ENABLE = (1 << 3),
72 FLAG_COLOR_ENABLE = (1 << 4),
73 FLAG_ALPHA_ENABLE = (1 << 5),
74
75 FLAG_POS_X_CONST = (1 << 19),
76 FLAG_POS_Y_CONST = (1 << 20),
77 FLAG_POS_Z_CONST = (1 << 21),
78
79 FLAG_COLOR_CONST = (1 << 22),
80 FLAG_ENABLE_CONST = (1 << 23),
81
82 FLAG_AIM_X_CONST = (1 << 24),
83 FLAG_AIM_Y_CONST = (1 << 25),
84 FLAG_AIM_Z_CONST = (1 << 26),
85
86 FLAG_CUTOFF_CONST = (1 << 27),
87 FLAG_REF_DISTANCE_CONST = (1 << 28),
88 FLAG_REF_BRIGHTNESS_CONST = (1 << 29),
89 FLAG_SPEC_COLOR_CONST = (1 << 30),
90 FLAG_SHININESS_CONST = (1 << 31)
91 };
92
93 ulong size; // at 0x0
94 s32 toResAnmScnData; // at 0x4
95 s32 name; // at 0x8
96 ulong id; // at 0xC
97 ulong refNumber; // at 0x10
98 ulong specLightObjIdx; // at 0x14
99 s32 toResUserData; // at 0x18
100 ulong flags; // at 0x1C
101 ResBoolAnmData enable; // at 0x20
102 ResAnmData posX; // at 0x24
103 ResAnmData posY; // at 0x28
104 ResAnmData posZ; // at 0x2C
105 ResColorAnmData color; // at 0x30
106 ResAnmData aimX; // at 0x34
107 ResAnmData aimY; // at 0x38
108 ResAnmData aimZ; // at 0x3C
109 GXDistAttnFn distFunc; // at 0x40
110 ResAnmData refDistance; // at 0x44
111 ResAnmData refBrightness; // at 0x48
112 GXSpotFn spotFunc; // at 0x4C
113 ResAnmData cutoff; // at 0x50
114 ResColorAnmData specColor; // at 0x54
115 ResAnmData shininess; // at 0x58
116};
117
118class ResAnmLight : public ResCommon<ResAnmLightData>,
120public:
121 NW4R_G3D_RESOURCE_FUNC_DEF(ResAnmLight);
122
123 void GetAnmResult(LightAnmResult* pResult, f32 frame) const;
124
125 ulong GetID() const {
126 return ref().id;
127 }
128
129 ulong GetRefNumber() const {
130 return ref().refNumber;
131 }
132
133 ulong GetSpecularLightIdx() const {
134 return ref().specLightObjIdx;
135 }
136
137 bool HasSpecularLight() const {
138 return ref().flags & ResAnmLightData::FLAG_SPECULAR_ENABLE;
139 }
140};
141
142} // namespace g3d
143} // namespace nw4r
144
145#endif
3D graphics drawing library.
Definition g3d_3dsmax.h:10