NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
bmdl.cpp
1#include <game/mLib/m_3d.hpp>
2
3#include <lib/nw4r/g3d/scn_mdl.hpp>
4#include <game/mLib/m_mtx.hpp>
5
6m3d::bmdl_c::~bmdl_c() {
7 remove();
8}
9
10bool m3d::bmdl_c::getNodeWorldMtx(ulong idx, nw4r::math::MTX34 *mtx) const {
11 nw4r::g3d::ScnMdlSimple *scnMdl = nw4r::g3d::G3dObj::DynamicCast<nw4r::g3d::ScnMdlSimple>(mpScn);
12 return scnMdl->GetScnMtxPos(mtx, nw4r::g3d::ScnObj::TYPE_UNK, idx);
13}
14
15bool m3d::bmdl_c::getNodeWorldMtxMultVecZero(ulong idx, nw4r::math::VEC3 &vec) const {
16 mMtx_c mtx;
17
18 if (!getNodeWorldMtx(idx, &mtx)) {
19 return false;
20 }
21
22 mtx.multVecZero(vec);
23 return true;
24}
25
26void m3d::bmdl_c::setAnm(m3d::banm_c &anm) {
27 if (anm.getType() == banm_c::TYPE_ANM_OTHER) {
28 nw4r::g3d::ScnMdl *scnMdl = nw4r::g3d::G3dObj::DynamicCast<nw4r::g3d::ScnMdl>(mpScn);
29 scnMdl->SetAnmObj(anm.getObj(), nw4r::g3d::ScnMdl::ANMOBJTYPE_NOT_SPECIFIED);
30 } else {
31 nw4r::g3d::ScnMdlSimple *scnMdl = nw4r::g3d::G3dObj::DynamicCast<nw4r::g3d::ScnMdlSimple>(mpScn);
32 if (anm.getType() == banm_c::TYPE_ANM_CHR) {
33 mpAnm = &anm;
34 }
35
36 scnMdl->SetAnmObj(anm.getObj(), nw4r::g3d::ScnMdl::ANMOBJTYPE_NOT_SPECIFIED);
37 }
38}
39
40void m3d::bmdl_c::play() {
41 if (mpAnm == nullptr) {
42 return;
43 }
44
45 mpAnm->play();
46}
47
48nw4r::g3d::ResMdl m3d::bmdl_c::getResMdl() const {
49 nw4r::g3d::ScnMdlSimple *scnMdl = nw4r::g3d::G3dObj::DynamicCast<nw4r::g3d::ScnMdlSimple>(mpScn);
50 return scnMdl->mpResMdl;
51}
52
53nw4r::g3d::ResMat *m3d::bmdl_c::getResMat(ulong idx) const {
54 nw4r::g3d::ScnMdlSimple *scnMdl = nw4r::g3d::G3dObj::DynamicCast<nw4r::g3d::ScnMdlSimple>(mpScn);
55 nw4r::g3d::ResMdl mdl = scnMdl->mpResMdl;
56 return mdl.GetResMat(idx);
57}
58
59void m3d::bmdl_c::removeAnm(nw4r::g3d::ScnMdlSimple::AnmObjType objType) {
60 nw4r::g3d::ScnMdlSimple *scnMdl = nw4r::g3d::G3dObj::DynamicCast<nw4r::g3d::ScnMdlSimple>(mpScn);
61 if (objType == nw4r::g3d::ScnMdl::ANMOBJTYPE_CHR) {
62 mpAnm = nullptr;
63 }
64
65 scnMdl->RemoveAnmObj(objType);
66}
67
68void m3d::bmdl_c::setTevColor(ulong idx, _GXTevRegID regID, _GXColor color, bool markDirty) {
69 nw4r::g3d::ScnMdl *scnMdl = nw4r::g3d::G3dObj::DynamicCast<nw4r::g3d::ScnMdl>(mpScn);
70 if (scnMdl != nullptr) {
71 nw4r::g3d::ScnMdl::CopiedMatAccess cma(scnMdl, idx);
72 nw4r::g3d::ResMatTevColor tevColor = cma.GetResMatTevColor(markDirty);
73
74 tevColor.GXSetTevColor(regID, color);
75 tevColor.DCStore(false);
76 } else {
77 nw4r::g3d::ResMat *resMat = getResMat(idx);
78 nw4r::g3d::ResMatTevColor tevColor = resMat->GetResMatTevColor();
79
80 tevColor.GXSetTevColor(regID, color);
81 tevColor.DCStore(false);
82 }
83}
84
85void m3d::bmdl_c::setTevColorAll(_GXTevRegID regID, _GXColor color, bool markDirty) {
86 nw4r::g3d::ResMdl resMdl = getResMdl();
87 nw4r::g3d::ScnMdl *scnMdl = nw4r::g3d::G3dObj::DynamicCast<nw4r::g3d::ScnMdl>(mpScn);
88 if (scnMdl != nullptr) {
89 for (ulong i = 0; i < resMdl.GetResMatNumEntries(); i++) {
90 nw4r::g3d::ScnMdl::CopiedMatAccess cma(scnMdl, i);
91 nw4r::g3d::ResMatTevColor tevColor = cma.GetResMatTevColor(markDirty);
92
93 tevColor.GXSetTevColor(regID, color);
94 tevColor.DCStore(false);
95 }
96 } else {
97 for (ulong i = 0; i < resMdl.GetResMatNumEntries(); i++) {
98 nw4r::g3d::ResMat *resMat = resMdl.GetResMat(i);
99 nw4r::g3d::ResMatTevColor tevColor = resMat->GetResMatTevColor();
100
101 tevColor.GXSetTevColor(regID, color);
102 tevColor.DCStore(false);
103 }
104 }
105}
106
107void m3d::bmdl_c::setTevKColor(ulong idx, _GXTevKColorID colID, _GXColor color, bool markDirty) {
108 nw4r::g3d::ScnMdl *scnMdl = nw4r::g3d::G3dObj::DynamicCast<nw4r::g3d::ScnMdl>(mpScn);
109 if (scnMdl != nullptr) {
110 nw4r::g3d::ScnMdl::CopiedMatAccess cma(scnMdl, idx);
111 nw4r::g3d::ResMatTevColor tevColor = cma.GetResMatTevColor(markDirty);
112
113 tevColor.GXSetTevKColor(colID, color);
114 tevColor.DCStore(false);
115 } else {
116 nw4r::g3d::ResMat *resMat = getResMat(idx);
117 nw4r::g3d::ResMatTevColor tevColor = resMat->GetResMatTevColor();
118
119 tevColor.GXSetTevKColor(colID, color);
120 tevColor.DCStore(false);
121 }
122}
123
124void m3d::bmdl_c::setTevKColorAll(_GXTevKColorID colID, _GXColor color, bool markDirty) {
125 nw4r::g3d::ResMdl resMdl = getResMdl();
126 nw4r::g3d::ScnMdl *scnMdl = nw4r::g3d::G3dObj::DynamicCast<nw4r::g3d::ScnMdl>(mpScn);
127 if (scnMdl != nullptr) {
128 for (ulong i = 0; i < resMdl.GetResMatNumEntries(); i++) {
129 nw4r::g3d::ScnMdl::CopiedMatAccess cma(scnMdl, i);
130 nw4r::g3d::ResMatTevColor tevColor = cma.GetResMatTevColor(markDirty);
131
132 tevColor.GXSetTevKColor(colID, color);
133 tevColor.DCStore(false);
134 }
135 } else {
136 for (ulong i = 0; i < resMdl.GetResMatNumEntries(); i++) {
137 nw4r::g3d::ResMat *resMat = resMdl.GetResMat(i);
138 nw4r::g3d::ResMatTevColor tevColor = resMat->GetResMatTevColor();
139
140 tevColor.GXSetTevKColor(colID, color);
141 tevColor.DCStore(false);
142 }
143 }
144}
145
146void m3d::bmdl_c::remove() {
147 mpAnm = nullptr;
148 scnLeaf_c::remove();
149}
@ TYPE_ANM_OTHER
Never used.
Definition banm.hpp:27
void multVecZero(nw4r::math::VEC3 &out) const
Extracts the translation vector from the matrix.
Definition m_mtx.cpp:137