mirror of
https://github.com/zeldaret/ss
synced 2026-08-12 20:02:26 -04:00
9c3c480b24
* g3d_calcvtx GetData seems to have changed -> dwarf says r is a local and using ofs_to_ptr didnt work * g3d_light and g3d_fog sdata2 splits and func ordering * g3d_scnproc * g3d_init * g3d_scnmdl * g3d_scnmdlsmpl * g3d_scnroot * g3d_scnobj * g3d_res* progress * g3d_resmdl OK * g3d_restev OK * g3d_resmat OK * g3d_resvtx and g3d_restex OK * g3d_resnode OK * g3d_resanm OK * g3d_resanmchr Progress * the rest of g3d_res* OK * g3d_anmvis OK * g3d_anmclr OK * Some Splitting * more OK, Inline Issue in g3d_anmtexsrt * g3d_obj, g3d_anmobj, g3d_gpu, g3d_tmem, g3d_cpu OK * g3d_state OK * g3d/dcc OK * Include fixup * More Fixups * g3d_camera OK * g3d_draw OK * g3d_calcworld OK * g3d_calcworld actually OK * g3d_workmem, g3d_dcc OK * g3d_calcview OK * g3d_anmtexsrt OK with DONT_INLINE * g3d_transform OK (Feels Cheaty) * g3d_resanmchr OK * g3d_draw1mat1shp Close * g3d_draw1mat1shp OK (Thanks Lago!). Ran symbol applying script
72 lines
1.6 KiB
C++
72 lines
1.6 KiB
C++
#ifndef NW4R_G3D_SCN_PROC_H
|
|
#define NW4R_G3D_SCN_PROC_H
|
|
#include <nw4r/types_nw4r.h>
|
|
|
|
#include "nw4r/g3d/g3d_scnobj.h"
|
|
|
|
namespace nw4r {
|
|
namespace g3d {
|
|
|
|
class ScnProc : public ScnLeaf {
|
|
public:
|
|
typedef void (*DrawProc)(ScnProc *pProc, bool opa);
|
|
|
|
public:
|
|
static ScnProc *Construct(MEMAllocator *pAllocator, u32 *pSize, DrawProc pProc, bool opa, bool xlu, u32 userData);
|
|
|
|
ScnProc(MEMAllocator *pAllocator, DrawProc pProc, void *pUserData, bool opa, bool xlu)
|
|
: ScnLeaf(pAllocator), mFlag(0), mpDrawProc(pProc), mpUserData(pUserData) {
|
|
if (opa) {
|
|
mFlag |= SCNPROCFLAG_DRAW_OPA;
|
|
}
|
|
|
|
if (xlu) {
|
|
mFlag |= SCNPROCFLAG_DRAW_XLU;
|
|
}
|
|
}
|
|
|
|
virtual void G3dProc(u32 task, u32 param, void *pInfo); // at 0xC
|
|
virtual ~ScnProc() {} // at 0x10
|
|
|
|
void SetDrawProc(DrawProc pProc, bool opa, bool xlu) {
|
|
mpDrawProc = pProc;
|
|
|
|
if (opa) {
|
|
mFlag |= SCNPROCFLAG_DRAW_OPA;
|
|
} else {
|
|
mFlag &= ~SCNPROCFLAG_DRAW_OPA;
|
|
}
|
|
|
|
if (xlu) {
|
|
mFlag |= SCNPROCFLAG_DRAW_XLU;
|
|
} else {
|
|
mFlag &= ~SCNPROCFLAG_DRAW_XLU;
|
|
}
|
|
}
|
|
|
|
void SetUserData(void *pData) {
|
|
mpUserData = pData;
|
|
}
|
|
void *GetUserData() {
|
|
return mpUserData;
|
|
}
|
|
|
|
private:
|
|
enum ScnProcFlag {
|
|
SCNPROCFLAG_DRAW_OPA = (1 << 0),
|
|
SCNPROCFLAG_DRAW_XLU = (1 << 1)
|
|
};
|
|
|
|
private:
|
|
u32 mFlag; // at 0xE8
|
|
DrawProc mpDrawProc; // at 0xEC
|
|
void *mpUserData; // at 0xF0
|
|
|
|
NW4R_G3D_RTTI_DECL_DERIVED(ScnProc, ScnLeaf);
|
|
};
|
|
|
|
} // namespace g3d
|
|
} // namespace nw4r
|
|
|
|
#endif
|