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 <platform.h>
5
6#include "baselib/forward.h" // IWYU pragma: export
7
8#include "baselib/debug.h"
9#include "baselib/object.h"
10
11#include <dolphin/gx.h>
12#include <dolphin/gx/GXEnum.h>
13#include <dolphin/mtx.h>
14
15#define MAX_GXLIGHT 9
16
24
30
38
46
48 f32 a0;
49 f32 a1;
50 f32 a2;
51 f32 k0;
52 f32 k1;
53 f32 k2;
54};
55
56struct HSD_LObj {
57 /* 0x00 - 0x04 */ HSD_Obj parent;
58 /* 0x08 */ u16 flags;
59 /* 0x0A */ u16 priority;
60 /* 0x0C */ HSD_LObj* next;
61 /* 0x10 */ GXColor color;
62 /* 0x14 */ GXColor hw_color;
63 /* 0x18 */ HSD_WObj* position;
64 /* 0x1C */ HSD_WObj* interest;
65 /* 0x20 - 0x34 */ union {
69 } u;
70 /* 0x38 */ f32 shininess;
71 /* 0x3C - 0x44 */ Vec3 lvec;
72 /* 0x48 */ HSD_AObj* aobj;
73 /* 0x4C */ GXLightID id;
74 /* 0x50 */ GXLightObj lightobj;
75 /* 0x90 */ GXLightID spec_id;
76 /* 0x94 */ GXLightObj spec_lightobj;
77};
78
80 /* 0x00 */ char* class_name;
81 /* 0x04 */ HSD_LightDesc* next;
82 /* 0x08 */ u16 flags;
83 /* 0x0A */ u16 attnflags;
84 /* 0x0C */ GXColor color;
87 union {
88 void* p;
93 } u;
94};
95
102
105 int (*load)(HSD_LObj* lobj, HSD_LightDesc* ldesc);
106};
107
108#define HSD_LOBJ(o) ((HSD_LObj*) (o))
109#define HSD_LOBJ_INFO(i) ((HSD_LObjInfo*) (i))
110#define HSD_LOBJ_METHOD(o) HSD_LOBJ_INFO(HSD_OBJECT_METHOD((o)))
111
113{
114 HSD_ASSERT(367, lobj);
115 return lobj->priority;
116}
117
118extern HSD_LObjInfo hsdLobj;
119
120u32 HSD_LObjGetFlags(HSD_LObj* lobj);
121void HSD_LObjSetFlags(HSD_LObj* lobj, u32 flags);
122void HSD_LObjClearFlags(HSD_LObj* lobj, u32 flags);
123GXLightID HSD_LObjGetLightMaskDiffuse(void);
127void HSD_LObjSetActive(HSD_LObj* lobj);
128s32 HSD_LObjGetNbActive(void);
129HSD_LObj* HSD_LObjGetActiveByID(GXLightID id);
131void HSD_LObjClearActive(void);
132
133void LObjUpdateFunc(void* obj, enum_t type, HSD_ObjData* val);
134
135void HSD_LObjAddAnim(HSD_LObj* lobj, HSD_LightAnim* lanim);
136void HSD_LObjAddAnimAll(HSD_LObj* lobj, HSD_LightAnim* lanim);
137void HSD_LObjAnim(HSD_LObj* lobj);
138void HSD_LObjAnimAll(HSD_LObj* lobj);
139void HSD_LObjReqAnim(HSD_LObj* lobj, f32 startframe);
140void HSD_LObjReqAnimAll(HSD_LObj* lobj, f32 startframe);
141void HSD_LObjGetLightVector(HSD_LObj* lobj, Vec3* dir);
142void HSD_LObjSetup(HSD_LObj* lobj, GXColor color, f32 shininess);
143
144bool HSD_LObjGetPosition(HSD_LObj*, Vec3*);
145bool HSD_LObjGetInterest(HSD_LObj*, Vec3*);
146
149void HSD_LObjSetPositionWObj(HSD_LObj* lobj, HSD_WObj* wobj);
150void HSD_LObjSetInterestWObj(HSD_LObj* lobj, HSD_WObj* wobj);
151
152u32 HSD_LightID2Index(GXLightID);
154s32 HSD_Index2LightID(u32);
155void HSD_LObjRemoveAll(HSD_LObj* lobj);
156void HSD_LObjSetPosition(HSD_LObj* lobj, Vec3* position);
157void HSD_LObjSetInterest(HSD_LObj* lobj, Vec3* interest);
158void HSD_LObj_803668EC(HSD_LObj* lobj);
159void HSD_LObjSetupInit(HSD_CObj* arg0);
160
161void HSD_LObjSetColor(HSD_LObj* lobj, GXColor color);
162void HSD_LObjGetColor(HSD_LObj* lobj, GXColor* color);
163void HSD_LObjSetSpot(HSD_LObj* lobj, f32 cutoff, s32 point_func);
164void HSD_LObjSetDistAttn(HSD_LObj* lobj, f32 ref_dist, f32 ref_br,
165 s32 dist_func);
166void HSD_LObjSetAttnA(HSD_LObj* lobj, f32 a0, f32 a1, f32 a2);
167void HSD_LObjSetAttnK(HSD_LObj* lobj, f32 k0, f32 k1, f32 k2);
168void HSD_LObjSetAttn(HSD_LObj* lobj, f32 a0, f32 a1, f32 a2, f32 k0, f32 k1,
169 f32 k2);
170
171void HSD_LObjSetupSpecularInit(Mtx pmtx);
172u32 HSD_LObjGetType(HSD_LObj* lobj);
173void HSD_LObjAddCurrent(HSD_LObj* lobj);
174void HSD_LObjUnrefThis(HSD_LObj* lobj);
178
183
184static inline HSD_LObj* HSD_LObjGetNext(HSD_LObj* lobj)
185{
186 if (lobj == NULL) {
187 return NULL;
188 } else {
189 return lobj->next;
190 }
191}
192
193#endif
#define HSD_ASSERT(line, cond)
Definition debug.h:19
void HSD_LObjGetColor(HSD_LObj *lobj, GXColor *color)
Definition lobj.c:804
void HSD_LObjSetAttn(HSD_LObj *lobj, f32 a0, f32 a1, f32 a2, f32 k0, f32 k1, f32 k2)
Definition lobj.c:849
void HSD_LObj_803668EC(HSD_LObj *lobj)
Definition lobj.c:700
void HSD_LObjSetColor(HSD_LObj *lobj, GXColor color)
Definition lobj.c:799
void LObjUpdateFunc(void *obj, enum_t type, HSD_ObjData *val)
Definition lobj.c:129
void HSD_LObjAnim(HSD_LObj *lobj)
Definition lobj.c:199
void HSD_LObjClearFlags(HSD_LObj *lobj, u32 flags)
Definition lobj.c:45
void HSD_LObjSetCurrentAll(HSD_LObj *lobj)
Definition lobj.c:675
void HSD_LObjReqAnimAll(HSD_LObj *lobj, f32 startframe)
Definition lobj.c:232
void HSD_LObjDeleteCurrentAll(HSD_LObj *lobj)
Definition lobj.c:663
void HSD_LObjSetDistAttn(HSD_LObj *lobj, f32 ref_dist, f32 ref_br, s32 dist_func)
Definition lobj.c:817
void HSD_LObjSetSpot(HSD_LObj *lobj, f32 cutoff, s32 point_func)
Definition lobj.c:809
void HSD_LObjSetPosition(HSD_LObj *lobj, Vec3 *position)
Definition lobj.c:858
s32 HSD_LObjGetLightMaskSpecular(void)
Definition lobj.c:68
void HSD_LObjSetFlags(HSD_LObj *lobj, u32 flags)
Definition lobj.c:37
void HSD_LObjAddAnim(HSD_LObj *lobj, HSD_LightAnim *lanim)
Definition lobj.c:1021
void HSD_LObjSetPositionWObj(HSD_LObj *lobj, HSD_WObj *wobj)
Definition lobj.c:932
HSD_LObj * HSD_LObjGetActiveByIndex(s32 idx)
Definition lobj.c:109
s32 HSD_LObjGetNbActive(void)
Definition lobj.c:94
HSD_WObj * HSD_LObjGetPositionWObj(HSD_LObj *lobj)
Definition lobj.c:916
u32 HSD_LObjGetFlags(HSD_LObj *lobj)
Definition lobj.c:32
void HSD_LObjRemoveAll(HSD_LObj *lobj)
Definition lobj.c:785
void HSD_LObjSetInterest(HSD_LObj *lobj, Vec3 *interest)
Definition lobj.c:877
void HSD_LObjDeleteCurrent(HSD_LObj *lobj)
Definition lobj.c:630
void HSD_LObjReqAnim(HSD_LObj *lobj, f32 startframe)
Definition lobj.c:221
void HSD_LObjSetDefaultClass(HSD_LObjInfo *info)
Definition lobj.c:896
void HSD_LObjClearActive(void)
Definition lobj.c:118
void HSD_LObjSetAttnA(HSD_LObj *lobj, f32 a0, f32 a1, f32 a2)
Definition lobj.c:827
bool HSD_LObjGetPosition(HSD_LObj *, Vec3 *)
Definition lobj.c:868
HSD_LObjInfo * HSD_LObjGetDefaultClass(void)
Definition lobj.c:904
void HSD_LObjUnrefThis(HSD_LObj *lobj)
Definition lobj.c:620
HSD_LObj * HSD_LObjLoadDesc(HSD_LightDesc *ldesc)
Definition lobj.c:998
u32 HSD_LightID2Index(GXLightID)
Definition lobj.c:721
void HSD_LObjSetInterestWObj(HSD_LObj *lobj, HSD_WObj *wobj)
Definition lobj.c:942
void HSD_LObjSetAttnK(HSD_LObj *lobj, f32 k0, f32 k1, f32 k2)
Definition lobj.c:838
HSD_LObjInfo hsdLobj
GXLightID HSD_LObjGetLightMaskDiffuse(void)
Definition lobj.c:53
void HSD_LObjAddCurrent(HSD_LObj *lobj)
Definition lobj.c:596
static HSD_LObj * HSD_LObjGetNext(HSD_LObj *lobj)
Definition lobj.h:184
void HSD_LObjSetupInit(HSD_CObj *arg0)
Definition lobj.c:477
u32 HSD_LObjGetType(HSD_LObj *lobj)
Definition lobj.c:73
HSD_LObj * HSD_LObjGetCurrentByType(u16 type)
Definition lobj.c:707
HSD_LObj * HSD_LObjGetActiveByID(GXLightID id)
Definition lobj.c:99
u8 HSD_LObjGetPriority(HSD_LObj *lobj)
Definition lobj.h:112
s32 HSD_LObjGetLightMaskAlpha(void)
Definition lobj.c:63
s32 HSD_Index2LightID(u32)
Definition lobj.c:759
void HSD_LObjGetLightVector(HSD_LObj *lobj, Vec3 *dir)
Definition lobj.c:248
s32 HSD_LObjGetLightMaskAttnFunc(void)
Definition lobj.c:58
bool HSD_LObjGetInterest(HSD_LObj *, Vec3 *)
Definition lobj.c:887
void HSD_LObjAddAnimAll(HSD_LObj *lobj, HSD_LightAnim *lanim)
Definition lobj.c:1037
void HSD_LObjAnimAll(HSD_LObj *lobj)
Definition lobj.c:208
void HSD_LObjSetup(HSD_LObj *lobj, GXColor color, f32 shininess)
Definition lobj.c:267
void HSD_LObjSetActive(HSD_LObj *lobj)
Definition lobj.c:78
HSD_LObj * HSD_LObjAlloc(void)
Definition lobj.c:909
HSD_WObj * HSD_LObjGetInterestWObj(HSD_LObj *lobj)
Definition lobj.c:924
void HSD_LObjSetupSpecularInit(Mtx pmtx)
Definition lobj.c:306
int enum_t
The underlying type of an enum, used as a placeholder.
Definition platform.h:9
void * obj
Definition pobj.c:43
f32 shininess
Definition state.c:46
#define NULL
Definition stddef.h:19
Definition aobj.h:50
Definition aobj.h:40
Definition cobj.h:39
Definition lobj.h:103
HSD_ObjInfo parent
Definition lobj.h:104
int(* load)(HSD_LObj *lobj, HSD_LightDesc *ldesc)
Definition lobj.h:105
Definition lobj.h:56
HSD_LightAttn attn
Definition lobj.h:68
HSD_LightSpot spot
Definition lobj.h:67
u16 priority
Definition lobj.h:59
HSD_LightPoint point
Definition lobj.h:66
u16 flags
Definition lobj.h:58
GXColor color
Definition lobj.h:61
union HSD_LObj::@320 u
HSD_WObj * interest
Definition lobj.h:64
HSD_Obj parent
Definition lobj.h:57
HSD_WObj * position
Definition lobj.h:63
GXLightID id
Definition lobj.h:73
Vec3 lvec
Definition lobj.h:71
HSD_LObj * next
Definition lobj.h:60
GXLightObj spec_lightobj
Definition lobj.h:76
HSD_AObj * aobj
Definition lobj.h:72
GXColor hw_color
Definition lobj.h:62
GXLightObj lightobj
Definition lobj.h:74
GXLightID spec_id
Definition lobj.h:75
f32 shininess
Definition lobj.h:70
Definition lobj.h:96
HSD_AObjDesc * aobjdesc
Definition lobj.h:98
HSD_LightAnim * next
Definition lobj.h:97
HSD_WObjAnim * position_anim
Definition lobj.h:99
HSD_WObjAnim * interest_anim
Definition lobj.h:100
Definition lobj.h:47
f32 a0
Definition lobj.h:48
f32 k2
Definition lobj.h:53
f32 k1
Definition lobj.h:52
f32 a2
Definition lobj.h:50
f32 k0
Definition lobj.h:51
f32 a1
Definition lobj.h:49
Definition lobj.h:79
void * p
Definition lobj.h:88
HSD_WObjDesc * position
Definition lobj.h:85
u16 flags
Definition lobj.h:82
HSD_WObjDesc * interest
Definition lobj.h:86
union HSD_LightDesc::@321 u
GXColor color
Definition lobj.h:84
HSD_LightSpotDesc * spot
Definition lobj.h:91
f32 * shininess
Definition lobj.h:89
HSD_LightPointDesc * point
Definition lobj.h:90
u16 attnflags
Definition lobj.h:83
char * class_name
Definition lobj.h:80
HSD_LightDesc * next
Definition lobj.h:81
HSD_LightAttn * attn
Definition lobj.h:92
Definition lobj.h:25
f32 ref_br
Definition lobj.h:26
u32 dist_func
Definition lobj.h:28
f32 ref_dist
Definition lobj.h:27
Definition lobj.h:17
f32 cutoff
Definition lobj.h:18
f32 ref_dist
Definition lobj.h:21
u32 point_func
Definition lobj.h:19
f32 ref_br
Definition lobj.h:20
u32 dist_func
Definition lobj.h:22
Definition lobj.h:39
u32 spot_func
Definition lobj.h:41
f32 ref_br
Definition lobj.h:42
f32 ref_dist
Definition lobj.h:43
u32 dist_func
Definition lobj.h:44
f32 cutoff
Definition lobj.h:40
Definition lobj.h:31
u32 spot_func
Definition lobj.h:33
f32 ref_br
Definition lobj.h:34
f32 ref_dist
Definition lobj.h:35
u32 dist_func
Definition lobj.h:36
f32 cutoff
Definition lobj.h:32
Definition object.h:66
Definition object.h:60
Definition wobj.h:32
Definition wobj.h:21
Definition wobj.h:13
Definition fobj.h:65