23class ScnMdlSimple :
public ScnLeaf {
32 ANMOBJTYPE_NOT_SPECIFIED,
34 ANMOBJTYPE_VTX = ANMOBJTYPE_SHP
44#define OPT(KEY, VALUE) OPTID_##KEY = (0x20000 | (VALUE))
45 enum ScnMdlSimpleOption {
47 OPT(IGNORE_ANMCHR_TRANS, 1),
52 static ScnMdlSimple* Construct(
MEMAllocator* pAllocator,
size_t* pSize,
56 math::MTX34* pWorldMtxArray, ulong* pWorldMtxAttribArray,
58 math::MTX34* pViewTexMtxArray,
int numView,
int numViewMtx);
60 virtual void G3dProc(ulong task, ulong param,
void* pInfo);
61 virtual ~ScnMdlSimple();
63 virtual bool SetScnObjOption(ulong option, ulong value);
64 virtual bool GetScnObjOption(ulong option, ulong* pValue)
const;
66 virtual bool SetAnmObj(
AnmObj* pObj, AnmObjType type);
67 virtual bool RemoveAnmObj(
AnmObj* pObj);
68 virtual AnmObj* RemoveAnmObj(AnmObjType type);
69 virtual AnmObj* GetAnmObj(AnmObjType type);
70 virtual const AnmObj* GetAnmObj(AnmObjType type)
const;
72 bool GetScnMtxPos(
math::MTX34* pMtx, ScnObjMtxType type,
size_t idx)
const;
76 void EnableScnMdlCallbackTiming(Timing timing);
77 void DisableScnMdlCallbackTiming(Timing timing);
88 const u8* GetByteCode(ByteCodeType type)
const;
93 const ResMdl GetResMdl()
const {
98 return mpWorldMtxArray;
100 ulong* GetWldMtxAttribArray() {
101 return mpWorldMtxAttribArray;
104 ulong GetNumViewMtx()
const {
108 const u8* GetByteCodeCalc() {
109 return mpByteCodeCalc;
111 const u8* GetByteCodeMix() {
112 return mpByteCodeMix;
114 const u8* GetByteCodeDrawOpa() {
115 return mpByteCodeDrawOpa;
117 const u8* GetByteCodeDrawXlu() {
118 return mpByteCodeDrawXlu;
121 ResMdlDrawMode GetDrawMode()
const {
126 mpCalcWorldCallback = pCallback;
129 return mpCalcWorldCallback;
132 u8 GetScnMdlCallbackTiming()
const {
136 void SetScnMdlCallbackNodeID(ulong
id) {
139 ulong GetScnMdlCallbackNodeID()
const {
150 return mpAnmObjMatClr;
153 return mpAnmObjTexPat;
156 return mpAnmObjTexSrt;
160 enum ScnMdlSmplFlag {
161 SCNMDLSMPLFLAG_LC_DMA = (1 << 0),
164 static const int VIEW_MAX = 16;
166 static const int MTX_CACHE_MIN = 8;
167 static const int MTX_CACHE_MAX =
171 void ScnMdlSmpl_CalcPosture(ulong param,
const math::MTX34* pParent);
173 void ScnMdlSmpl_G3DPROC_GATHER_SCNOBJ(ulong param,
175 void ScnMdlSmpl_G3DPROC_CALC_WORLD(ulong param,
const math::MTX34* pParent);
176 void ScnMdlSmpl_G3DPROC_CALC_MAT(ulong param,
void* pInfo);
177 void ScnMdlSmpl_G3DPROC_CALC_VIEW(ulong param,
const math::MTX34* pCamera);
178 void ScnMdlSmpl_G3DPROC_DRAW_OPA(ulong param,
void* pInfo);
179 void ScnMdlSmpl_G3DPROC_DRAW_XLU(ulong param,
void* pInfo);
181 void ScnMdlSmpl_G3DPROC_UPDATEFRAME(ulong ,
void* ) {
188 ulong* mpWorldMtxAttribArray;
195 ulong mFlagScnMdlSimple;
197 const u8* mpByteCodeCalc;
198 const u8* mpByteCodeMix;
199 const u8* mpByteCodeDrawOpa;
200 const u8* mpByteCodeDrawXlu;
201 ResMdlDrawMode mDrawMode;
205 u8 mCwcbDeleteOption;
214 NW4R_G3D_RTTI_DECL_DERIVED(ScnMdlSimple, ScnLeaf);