SSBM Decomp
Loading...
Searching...
No Matches
lobj.h
Go to the documentation of this file.
1#ifndef SYSDOLPHIN_BASELIB_LOBJ_H
2#define SYSDOLPHIN_BASELIB_LOBJ_H
3
4#include <Runtime/platform.h>
5
6#include <sysdolphin/baselib/forward.h> // IWYU pragma: export
7
8#include <dat_macros.h>
9
10#include <dolphin/gx.h>
11#include <dolphin/gx/GXEnum.h>
12#include <dolphin/mtx.h>
15
16#define MAX_GXLIGHT 9
17
25
31
39
47
56
57struct HSD_LObj {
58 /* 0x00 - 0x04 */ HSD_Obj parent;
59 /* 0x08 */ u16 flags;
60 /* 0x0A */ u16 priority;
61 /* 0x0C */ HSD_LObj* next;
62 /* 0x10 */ GXColor color;
63 /* 0x14 */ GXColor hw_color;
64 /* 0x18 */ HSD_WObj* position;
65 /* 0x1C */ HSD_WObj* interest;
71 /* 0x38 */ f32 shininess;
72 /* 0x3C - 0x44 */ Vec3 lvec;
73 /* 0x48 */ HSD_AObj* aobj;
74 /* 0x4C */ GXLightID id;
75 /* 0x50 */ GXLightObj lightobj;
76 /* 0x90 */ GXLightID spec_id;
78};
79
102
109
112 int (*load)(HSD_LObj* lobj, HSD_LightDesc* ldesc);
113};
114
115#define HSD_LOBJ(o) ((HSD_LObj*) (o))
116#define HSD_LOBJ_INFO(i) ((HSD_LObjInfo*) (i))
117#define HSD_LOBJ_METHOD(o) HSD_LOBJ_INFO(HSD_OBJECT_METHOD((o)))
118
119static inline u8 HSD_LObjGetPriority(HSD_LObj* lobj)
120{
121 HSD_ASSERT(367, lobj);
122 return lobj->priority;
123}
124
125extern HSD_LObjInfo hsdLobj;
126
128void HSD_LObjSetFlags(HSD_LObj* lobj, u32 flags);
129void HSD_LObjClearFlags(HSD_LObj* lobj, u32 flags);
134void HSD_LObjSetActive(HSD_LObj* lobj);
138void HSD_LObjClearActive(void);
139
140void LObjUpdateFunc(void* obj, enum_t type, HSD_ObjData* val);
141
142void HSD_LObjAddAnim(HSD_LObj* lobj, HSD_LightAnim* lanim);
143void HSD_LObjAddAnimAll(HSD_LObj* lobj, HSD_LightAnim* lanim);
144void HSD_LObjAnim(HSD_LObj* lobj);
145void HSD_LObjAnimAll(HSD_LObj* lobj);
146void HSD_LObjReqAnim(HSD_LObj* lobj, f32 startframe);
147void HSD_LObjReqAnimAll(HSD_LObj* lobj, f32 startframe);
148void HSD_LObjGetLightVector(HSD_LObj* lobj, Vec3* dir);
149void HSD_LObjSetup(HSD_LObj* lobj, GXColor color, f32 shininess);
150
153
156void HSD_LObjSetPositionWObj(HSD_LObj* lobj, HSD_WObj* wobj);
157void HSD_LObjSetInterestWObj(HSD_LObj* lobj, HSD_WObj* wobj);
158
162void HSD_LObjRemoveAll(HSD_LObj* lobj);
163void HSD_LObjSetPosition(HSD_LObj* lobj, Vec3* position);
165void HSD_LObj_803668EC(HSD_LObj* lobj);
166void HSD_LObjSetupInit(HSD_CObj* arg0);
167
168void HSD_LObjSetColor(HSD_LObj* lobj, GXColor color);
169void HSD_LObjGetColor(HSD_LObj* lobj, GXColor* color);
170void HSD_LObjSetSpot(HSD_LObj* lobj, f32 cutoff, s32 point_func);
171void HSD_LObjSetDistAttn(HSD_LObj* lobj, f32 ref_dist, f32 ref_br,
172 s32 dist_func);
173void HSD_LObjSetAttnA(HSD_LObj* lobj, f32 a0, f32 a1, f32 a2);
174void HSD_LObjSetAttnK(HSD_LObj* lobj, f32 k0, f32 k1, f32 k2);
175void HSD_LObjSetAttn(HSD_LObj* lobj, f32 a0, f32 a1, f32 a2, f32 k0, f32 k1,
176 f32 k2);
177
180void HSD_LObjAddCurrent(HSD_LObj* lobj);
181void HSD_LObjUnrefThis(HSD_LObj* lobj);
185
190
191static inline HSD_LObj* HSD_LObjGetNext(HSD_LObj* lobj)
192{
193 if (lobj == NULL) {
194 return NULL;
195 } else {
196 return lobj->next;
197 }
198}
199
200static inline void HSD_LObjSetNext(HSD_LObj* lobj, HSD_LObj* next)
201{
202 HSD_ASSERT(0x136, lobj);
203 lobj->next = next;
204}
205
206#endif
GXLightID
Definition GXEnum.h:438
Annotations describing how archive data is laid out, for the parts a C declaration cannot express: ho...
static HSD_WObjDesc interest
Definition if_2FF2.c:25
struct Vec Vec3
f32 Mtx[3][4]
Definition mtx.h:50
signed int s32
Definition types.h:12
unsigned int u32
Definition types.h:13
float f32
Definition types.h:18
unsigned short int u16
Definition types.h:7
unsigned char u8
Definition types.h:5
void HSD_LObjGetColor(HSD_LObj *lobj, GXColor *color)
Definition lobj.c:800
void HSD_LObjSetAttn(HSD_LObj *lobj, f32 a0, f32 a1, f32 a2, f32 k0, f32 k1, f32 k2)
Definition lobj.c:845
void HSD_LObj_803668EC(HSD_LObj *lobj)
Definition lobj.c:696
void HSD_LObjSetColor(HSD_LObj *lobj, GXColor color)
Definition lobj.c:795
static u8 HSD_LObjGetPriority(HSD_LObj *lobj)
Definition lobj.h:119
void LObjUpdateFunc(void *obj, enum_t type, HSD_ObjData *val)
Definition lobj.c:128
void HSD_LObjAnim(HSD_LObj *lobj)
Definition lobj.c:198
void HSD_LObjClearFlags(HSD_LObj *lobj, u32 flags)
Definition lobj.c:44
void HSD_LObjSetCurrentAll(HSD_LObj *lobj)
Definition lobj.c:671
void HSD_LObjReqAnimAll(HSD_LObj *lobj, f32 startframe)
Definition lobj.c:231
void HSD_LObjDeleteCurrentAll(HSD_LObj *lobj)
Definition lobj.c:659
void HSD_LObjSetDistAttn(HSD_LObj *lobj, f32 ref_dist, f32 ref_br, s32 dist_func)
Definition lobj.c:813
void HSD_LObjSetSpot(HSD_LObj *lobj, f32 cutoff, s32 point_func)
Definition lobj.c:805
static void HSD_LObjSetNext(HSD_LObj *lobj, HSD_LObj *next)
Definition lobj.h:200
void HSD_LObjSetPosition(HSD_LObj *lobj, Vec3 *position)
Definition lobj.c:854
s32 HSD_LObjGetLightMaskSpecular(void)
Definition lobj.c:67
void HSD_LObjSetFlags(HSD_LObj *lobj, u32 flags)
Definition lobj.c:36
void HSD_LObjAddAnim(HSD_LObj *lobj, HSD_LightAnim *lanim)
Definition lobj.c:1017
void HSD_LObjSetPositionWObj(HSD_LObj *lobj, HSD_WObj *wobj)
Definition lobj.c:928
HSD_LObj * HSD_LObjGetActiveByIndex(s32 idx)
Definition lobj.c:108
s32 HSD_LObjGetNbActive(void)
Definition lobj.c:93
HSD_WObj * HSD_LObjGetPositionWObj(HSD_LObj *lobj)
Definition lobj.c:912
u32 HSD_LObjGetFlags(HSD_LObj *lobj)
Definition lobj.c:31
void HSD_LObjRemoveAll(HSD_LObj *lobj)
Definition lobj.c:781
void HSD_LObjSetInterest(HSD_LObj *lobj, Vec3 *interest)
Definition lobj.c:873
void HSD_LObjDeleteCurrent(HSD_LObj *lobj)
Definition lobj.c:626
void HSD_LObjReqAnim(HSD_LObj *lobj, f32 startframe)
Definition lobj.c:220
void HSD_LObjSetDefaultClass(HSD_LObjInfo *info)
Definition lobj.c:892
void HSD_LObjClearActive(void)
Definition lobj.c:117
void HSD_LObjSetAttnA(HSD_LObj *lobj, f32 a0, f32 a1, f32 a2)
Definition lobj.c:823
bool HSD_LObjGetPosition(HSD_LObj *, Vec3 *)
Definition lobj.c:864
HSD_LObjInfo * HSD_LObjGetDefaultClass(void)
Definition lobj.c:900
void HSD_LObjUnrefThis(HSD_LObj *lobj)
Definition lobj.c:619
HSD_LObj * HSD_LObjLoadDesc(HSD_LightDesc *ldesc)
Definition lobj.c:994
u32 HSD_LightID2Index(GXLightID)
Definition lobj.c:717
void HSD_LObjSetInterestWObj(HSD_LObj *lobj, HSD_WObj *wobj)
Definition lobj.c:938
void HSD_LObjSetAttnK(HSD_LObj *lobj, f32 k0, f32 k1, f32 k2)
Definition lobj.c:834
HSD_LObjInfo hsdLobj
GXLightID HSD_LObjGetLightMaskDiffuse(void)
Definition lobj.c:52
void HSD_LObjAddCurrent(HSD_LObj *lobj)
Definition lobj.c:595
static HSD_LObj * HSD_LObjGetNext(HSD_LObj *lobj)
Definition lobj.h:191
void HSD_LObjSetupInit(HSD_CObj *arg0)
Definition lobj.c:476
u32 HSD_LObjGetType(HSD_LObj *lobj)
Definition lobj.c:72
HSD_LObj * HSD_LObjGetCurrentByType(u16 type)
Definition lobj.c:703
HSD_LObj * HSD_LObjGetActiveByID(GXLightID id)
Definition lobj.c:98
s32 HSD_LObjGetLightMaskAlpha(void)
Definition lobj.c:62
s32 HSD_Index2LightID(u32)
Definition lobj.c:755
void HSD_LObjGetLightVector(HSD_LObj *lobj, Vec3 *dir)
Definition lobj.c:247
s32 HSD_LObjGetLightMaskAttnFunc(void)
Definition lobj.c:57
bool HSD_LObjGetInterest(HSD_LObj *, Vec3 *)
Definition lobj.c:883
void HSD_LObjAddAnimAll(HSD_LObj *lobj, HSD_LightAnim *lanim)
Definition lobj.c:1033
void HSD_LObjAnimAll(HSD_LObj *lobj)
Definition lobj.c:207
void HSD_LObjSetup(HSD_LObj *lobj, GXColor color, f32 shininess)
Definition lobj.c:262
void HSD_LObjSetActive(HSD_LObj *lobj)
Definition lobj.c:77
HSD_LObj * HSD_LObjAlloc(void)
Definition lobj.c:905
HSD_WObj * HSD_LObjGetInterestWObj(HSD_LObj *lobj)
Definition lobj.c:920
void HSD_LObjSetupSpecularInit(Mtx pmtx)
Definition lobj.c:301
#define HSD_ASSERT(line, cond)
Definition mnvibration.c:6
int enum_t
The underlying type of an enum, used as a placeholder.
Definition platform.h:29
static u32 next
Definition rand.c:4
#define NULL
Definition stddef.h:19
Definition GXStruct.h:27
Definition GXStruct.h:39
Definition aobj.h:52
Definition aobj.h:42
Definition cobj.h:39
Definition lobj.h:110
HSD_ObjInfo parent
Definition lobj.h:111
int(* load)(HSD_LObj *lobj, HSD_LightDesc *ldesc)
Definition lobj.h:112
Definition lobj.h:57
u16 priority
Definition lobj.h:60
u16 flags
Definition lobj.h:59
GXColor color
Definition lobj.h:62
union HSD_LObj::HSD_LObj_u u
HSD_WObj * interest
Definition lobj.h:65
HSD_Obj parent
Definition lobj.h:58
HSD_WObj * position
Definition lobj.h:64
GXLightID id
Definition lobj.h:74
Vec3 lvec
Definition lobj.h:72
HSD_LObj * next
Definition lobj.h:61
GXLightObj spec_lightobj
Definition lobj.h:77
HSD_AObj * aobj
Definition lobj.h:73
GXColor hw_color
Definition lobj.h:63
GXLightObj lightobj
Definition lobj.h:75
GXLightID spec_id
Definition lobj.h:76
f32 shininess
Definition lobj.h:71
Definition lobj.h:103
HSD_AObjDesc * aobjdesc
Definition lobj.h:105
HSD_LightAnim * next
Definition lobj.h:104
HSD_WObjAnim * position_anim
Definition lobj.h:106
HSD_WObjAnim * interest_anim
Definition lobj.h:107
Definition lobj.h:48
f32 a0
Definition lobj.h:49
f32 k2
Definition lobj.h:54
f32 k1
Definition lobj.h:53
f32 a2
Definition lobj.h:51
f32 k0
Definition lobj.h:52
f32 a1
Definition lobj.h:50
Definition lobj.h:80
HSD_WObjDesc * position
Definition lobj.h:86
u16 flags
Definition lobj.h:83
HSD_WObjDesc * interest
Definition lobj.h:87
GXColor color
Definition lobj.h:85
u16 attnflags
Definition lobj.h:84
union HSD_LightDesc::HSD_LightDesc_u u
char * class_name
Definition lobj.h:81
HSD_LightDesc * next
Definition lobj.h:82
Definition lobj.h:26
f32 ref_br
Definition lobj.h:27
u32 dist_func
Definition lobj.h:29
f32 ref_dist
Definition lobj.h:28
Definition lobj.h:18
f32 cutoff
Definition lobj.h:19
f32 ref_dist
Definition lobj.h:22
u32 point_func
Definition lobj.h:20
f32 ref_br
Definition lobj.h:21
u32 dist_func
Definition lobj.h:23
Definition lobj.h:40
u32 spot_func
Definition lobj.h:42
f32 ref_br
Definition lobj.h:43
f32 ref_dist
Definition lobj.h:44
u32 dist_func
Definition lobj.h:45
f32 cutoff
Definition lobj.h:41
Definition lobj.h:32
u32 spot_func
Definition lobj.h:34
f32 ref_br
Definition lobj.h:35
f32 ref_dist
Definition lobj.h:36
u32 dist_func
Definition lobj.h:37
f32 cutoff
Definition lobj.h:33
Definition object.h:66
Definition object.h:60
Definition wobj.h:31
Definition wobj.h:20
Definition wobj.h:12
#define LOBJ_POINT
Definition forward.h:170
#define LOBJ_TYPE_MASK
Definition forward.h:181
#define LOBJ_INFINITE
Definition forward.h:169
#define LOBJ_SPOT
Definition forward.h:171
#define LOBJ_LIGHT_ATTN
Definition forward.h:184
Definition lobj.h:66
HSD_LightSpot spot
Definition lobj.h:68
HSD_LightAttn attn
Definition lobj.h:69
HSD_LightPoint point
Definition lobj.h:67
Definition lobj.h:88
HSD_LightPointDesc *point DAT_IF((flags &LOBJ_TYPE_MASK)==LOBJ_POINT &&!(attnflags &LOBJ_LIGHT_ATTN))
f32 *shininess DAT_IF((flags &LOBJ_TYPE_MASK)==LOBJ_INFINITE)
HSD_LightSpotDesc *spot DAT_IF((flags &LOBJ_TYPE_MASK)==LOBJ_SPOT &&attnflags==0)
HSD_LightAttn *attn DAT_IF(((flags &LOBJ_TYPE_MASK)==LOBJ_POINT &&(attnflags &LOBJ_LIGHT_ATTN))||((flags &LOBJ_TYPE_MASK)==LOBJ_SPOT &&attnflags !=0))
Definition fobj.h:70