1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#ifndef D_UNK_MDL_STUFF_2_H
#define D_UNK_MDL_STUFF_2_H
#include "common.h"
#include "m/m3d/m_proc.h"
#include "m/m_allocator.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "nw4r/g3d/res/g3d_resmat.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "nw4r/g3d/res/g3d_resshp.h"
/** a process for drawing shapes directly */
class dShpProcBase_c : public m3d::proc_c {
public:
dShpProcBase_c() : mLightSetId(1) {}
virtual ~dShpProcBase_c() {}
void setResMat(nw4r::g3d::ResMat mat);
void setResShp(nw4r::g3d::ResShp shp) {
mShp = shp;
}
void setupLight();
void draw(mVec3_c *pos);
void setAllFlags();
void doEntry(s32 lightSetId);
bool init(nw4r::g3d::ResMat mat, nw4r::g3d::ResShp shp, s32 count, bool xlu, u32 *pSize);
bool isDrawDisabled(s32 idx) const {
return mpFlags[idx];
}
void setDrawDisabled(s32 idx, bool val) {
mpFlags[idx] = val;
}
protected:
/* 0x18 */ nw4r::g3d::ResMat mMat;
/* 0x1C */ nw4r::g3d::ResShp mShp;
/* 0x20 */ bool *mpFlags;
/* 0x24 */ s32 mCount;
/* 0x28 */ s32 mLightSetId;
/* 0x2C */ u8 field_0x2C;
};
class dShpProc1_c : public dShpProcBase_c {
public:
virtual ~dShpProc1_c() {}
/* vt 0x18 */ virtual void drawOpa() override {
draw();
}
/* vt 0x1C */ virtual void drawXlu() override {
draw();
};
void clearTransforms() {
mpTransforms = nullptr;
}
bool create(nw4r::g3d::ResMat mat, nw4r::g3d::ResShp shp, s32 count, mHeapAllocator_c *alloc, bool xlu, u32 *pSize);
bool create(nw4r::g3d::ResMdl mdl, s32 count, mHeapAllocator_c *alloc, bool xlu, u32 *pSize) {
return create(mdl.GetResMat(0), mdl.GetResShp(0), count, alloc, xlu, pSize);
}
void draw();
void setTransform(s32 idx, const mMtx_c &transform) {
mpTransforms[idx].copyFrom(transform);
}
protected:
/* 0x30 */ mMtx_c *mpTransforms;
};
#endif
|