SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
NameObjExecuteHolder.cpp
1#include "Game/NameObj/NameObjExecuteHolder.hpp"
2#include "Game/NameObj/NameObjListExecutor.hpp"
3#include "Game/LiveActor/LiveActor.hpp"
4#include "Game/Scene/SceneObjHolder.hpp"
5#include "Game/System/GameSystem.hpp"
6#include "Game/SingletonHolder.hpp"
7
8NameObjExecuteInfo::NameObjExecuteInfo() {
9 mExecutedObject = 0;
10 _4 = 0;
11 _5 = 0;
12 _6 = -1;
13 _7 = -1;
14 _8 = -1;
15 _9 = -1;
16 _A = -1;
17}
18
19void NameObjExecuteInfo::setConnectInfo(NameObj *pObj, int a2, int a3, int a4, int a5) {
20 _4 = 2;
21 mExecutedObject = pObj;
22 _5 = 2;
23 _6 = a2;
24 _7 = a3;
25 _9 = a4;
26 _8 = a5;
27 NameObjListExecutor* exec = SingletonHolder<GameSystem>::sInstance->mSceneController->getNameObjListExecutor();
28
29 if (a4 != -1) {
30 _A = exec->registerDrawBuffer((LiveActor*)pObj, a4);
31 }
32
33 if (a2 != -1) {
34 exec->incrementCheckMovement(pObj, a2);
35 }
36
37 if (a3 != -1) {
38 exec->incrementCheckCalcAnim(pObj, a3);
39 }
40
41 if (a5 != -1) {
42 exec->incrementCheckDraw(pObj, a5);
43 }
44}
45
46void NameObjExecuteInfo::initConnectting() {
47 if (_4 == 1) {
48 _4 = 4;
49 connectToScene();
50 }
51 else {
52 _4 = 5;
53 }
54
55 if (_5 == 1) {
56 _5 = 4;
57 connectToDraw();
58 }
59 else {
60 _5 = 5;
61 }
62}
63
64void NameObjExecuteInfo::requestConnect(u8 *pData) {
65 switch (*pData) {
66 case 2:
67 *pData = 1;
68 break;
69 case 5:
70 *pData = 4;
71 break;
72 case 6:
73 case 7:
74 *pData = 3;
75 break;
76 case 1:
77 return;
78 }
79}
80
81void NameObjExecuteInfo::requestDisconnect(u8 *pData, bool a2) {
82 switch (*pData) {
83 case 1:
84 *pData = 2;
85 break;
86 case 3:
87 u8 val = 6;
88 if (a2) {
89 val = 7;
90 }
91
92 *pData = val;
93 break;
94 case 5:
95 case 6:
96 case 7:
97 break;
98 case 4:
99 *pData = 5;
100 break;
101 case 2:
102 return;
103 }
104}
105
106void NameObjExecuteInfo::executeRequirementConnectMovement() {
107 if (_4 == 4) {
108 connectToScene();
109 }
110}
111
112void NameObjExecuteInfo::executeRequirementDisconnectMovement() {
113 if (_4 == 6) {
114 disconnectToScene();
115 }
116}
117
118void NameObjExecuteInfo::executeRequirementConnectDraw() {
119 if (_5 == 4) {
120 connectToDraw();
121 }
122}
123
124void NameObjExecuteInfo::executeRequirementDisconnectDraw() {
125 if (_5 == 6) {
126 disconnectToDraw();
127 }
128}
129
130void NameObjExecuteInfo::executeRequirementDisconnectDrawDelay() {
131 if (_5 == 7) {
132 disconnectToDraw();
133 }
134}
135
136void NameObjExecuteInfo::requestMovementOn(int a1) {
137 s8 arg = a1;
138 if (_6 != arg) {
139 return;
140 }
141
142 MR::requestMovementOn(mExecutedObject);
143}
144
145void NameObjExecuteInfo::requestMovementOff(int a1) {
146 s8 arg = a1;
147 if (_6 != arg) {
148 return;
149 }
150
151 MR::requestMovementOff(mExecutedObject);
152}
153
154void NameObjExecuteInfo::findLightInfo() const {
155 SingletonHolder<GameSystem>::sInstance->mSceneController->getNameObjListExecutor()->findLightInfo(reinterpret_cast<LiveActor*>(mExecutedObject), _9, _A);
156}
157
158void NameObjExecuteInfo::connectToScene() {
159 _4 = 3;
160 NameObjListExecutor* exec = SingletonHolder<GameSystem>::sInstance->mSceneController->getNameObjListExecutor();
161
162 if (_6 != -1) {
163 exec->addToMovement(mExecutedObject, _6);
164 }
165
166 if (_7 != -1) {
167 exec->addToCalcAnim(mExecutedObject, _7);
168 }
169}
170
171void NameObjExecuteInfo::disconnectToScene() {
172 _4 = 5;
173 NameObjListExecutor* exec = SingletonHolder<GameSystem>::sInstance->mSceneController->getNameObjListExecutor();
174
175 if (_5 != -1) {
176 exec->removeToMovement(mExecutedObject, _5);
177 }
178
179 if (_7 != -1) {
180 exec->removeToCalcAnim(mExecutedObject, _7);
181 }
182}
183
184void NameObjExecuteInfo::connectToDraw() {
185 _5 = 3;
186 NameObjListExecutor* exec = SingletonHolder<GameSystem>::sInstance->mSceneController->getNameObjListExecutor();
187
188 if (_8 != -1) {
189 exec->addToDraw(mExecutedObject, _8);
190 }
191
192 if (_9 != -1) {
193 exec->addToDrawBuffer((LiveActor*)mExecutedObject, _9, _A);
194 }
195}
196
197void NameObjExecuteInfo::disconnectToDraw() {
198 _5 = 5;
199 NameObjListExecutor* exec = SingletonHolder<GameSystem>::sInstance->mSceneController->getNameObjListExecutor();
200
201 if (_8 != -1) {
202 exec->removeToDraw(mExecutedObject, _8);
203 }
204
205 if (_9 != -1) {
206 exec->removeToDrawBuffer((LiveActor*)mExecutedObject, _9, _A);
207 }
208}
209
210void NameObjExecuteHolder::registerActor(NameObj *pObj, int a2, int a3, int a4, int a5) {
211 mExecuteArray[_14].setConnectInfo(pObj, a2, a3, a4, a5);
212 pObj->mExecutorIdx = _14;
213 _14++;
214}
215
216void NameObjExecuteHolder::initConnectting() {
217 for (s32 i = 0; i < mExecuteCount; i++) {
218 mExecuteArray[i].initConnectting();
219 }
220}
221
222void NameObjExecuteHolder::connectToScene(NameObj *pObj) {
223 NameObjExecuteInfo* inf = getConnectToSceneInfo(pObj);
224
225 if (inf) {
226 inf->requestConnect((u8*)&inf->_4);
227 _18 = 1;
228 }
229}
230
231void NameObjExecuteHolder::connectToDraw(NameObj *pObj) {
232 NameObjExecuteInfo* inf = getConnectToSceneInfo(pObj);
233
234 if (inf) {
235 inf->requestConnect((u8*)&inf->_5);
236 _1A = 1;
237 }
238}
239
240void NameObjExecuteHolder::disconnectToScene(NameObj *pObj) {
241 NameObjExecuteInfo* inf = getConnectToSceneInfo(pObj);
242
243 if (inf) {
244 inf->requestDisconnect((u8*)&inf->_4, false);
245 _19 = 1;
246 }
247}
248
249void NameObjExecuteHolder::disconnectToDraw(NameObj *pObj) {
250 NameObjExecuteInfo* inf = getConnectToSceneInfo(pObj);
251
252 if (inf) {
253 inf->requestDisconnect((u8*)&inf->_5, false);
254 _1B = 1;
255 }
256}
257
258bool NameObjExecuteHolder::isConnectToDraw(const NameObj *pObj) const {
259 NameObjExecuteInfo* inf = getConnectToSceneInfo(pObj);
260 bool ret = false;
261
262 if (inf) {
263 if (inf->_5 == 3) {
264 ret = true;
265 }
266 }
267
268 return ret;
269}
270
271void NameObjExecuteHolder::executeRequirementConnectMovement() {
272 if (_18) {
273 for (s32 i = 0; i < mExecuteCount; i++) {
274 mExecuteArray[i].executeRequirementConnectMovement();
275 }
276
277 _18 = 0;
278 }
279}
280
281void NameObjExecuteHolder::executeRequirementDisconnectMovement() {
282 if (_19) {
283 for (s32 i = 0; i < mExecuteCount; i++) {
284 mExecuteArray[i].executeRequirementDisconnectMovement();
285 }
286
287 _19 = 0;
288 }
289}
290
291void NameObjExecuteHolder::executeRequirementConnectDraw() {
292 if (_1A) {
293 for (s32 i = 0; i < mExecuteCount; i++) {
294 mExecuteArray[i].executeRequirementConnectDraw();
295 }
296
297 _1A = 0;
298 }
299}
300
301void NameObjExecuteHolder::executeRequirementDisconnectDraw() {
302 if (_1B) {
303 for (s32 i = 0; i < mExecuteCount; i++) {
304 mExecuteArray[i].executeRequirementDisconnectDraw();
305 }
306
307 _1B = 0;
308 }
309}
310
311void NameObjExecuteHolder::executeRequirementDisconnectDrawDelay() {
312 if (_1C) {
313 for (s32 i = 0; i < mExecuteCount; i++) {
314 mExecuteArray[i].executeRequirementDisconnectDrawDelay();
315 }
316
317 _1C = 0;
318 }
319}
320
321void NameObjExecuteHolder::requestMovementOn(int idx) {
322 for (s32 i = 0; i < mExecuteCount; i++) {
323 mExecuteArray[i].requestMovementOn(idx);
324 }
325}
326
327void NameObjExecuteHolder::requestMovementOff(int idx) {
328 for (s32 i = 0; i < mExecuteCount; i++) {
329 mExecuteArray[i].requestMovementOff(idx);
330 }
331}
332
333NameObjExecuteInfo* NameObjExecuteHolder::getConnectToSceneInfo(const NameObj *pObj) const {
334 if (pObj->mExecutorIdx >= 0) {
335 return &mExecuteArray[pObj->mExecutorIdx];
336 }
337
338 return 0;
339}
340
341/* these functions were likely placed here via the linker */
342namespace MR {
343 void registerNameObjToExecuteHolder(NameObj *pObj, int a2, int a3, int a4, int a5) {
344 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->registerActor(pObj, a2, a3, a4, a5);
345 }
346
347 void initConnectting() {
348 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->initConnectting();
349 }
350
351 void connectToSceneTemporarily(NameObj *pObj) {
352 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->connectToScene(pObj);
353 }
354
355 void disconnectToSceneTemporarily(NameObj *pObj) {
356 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->disconnectToScene(pObj);
357 }
358
359 void connectToDrawTemporarily(NameObj *pObj) {
360 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->connectToDraw(pObj);
361 }
362
363 void disconnectToDrawTemporarily(NameObj *pObj) {
364 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->disconnectToDraw(pObj);
365 }
366
367 bool isConnectToDrawTemporarily(const NameObj *pObj) {
368 return reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->isConnectToDraw(pObj);
369 }
370
371 void executeRequirementConnectMovement() {
372 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->executeRequirementConnectMovement();
373 }
374
375 void executeRequirementDisconnectMovement() {
376 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->executeRequirementDisconnectMovement();
377 }
378
379 void executeRequirementConnectDraw() {
380 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->executeRequirementConnectDraw();
381 }
382
383 void executeRequirementDisconnectDraw() {
384 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->executeRequirementDisconnectDraw();
385 }
386
387 void executeRequirementDisconnectDrawDelay() {
388 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->executeRequirementDisconnectDrawDelay();
389 }
390
391 void requestMovementOnWithCategory(int category) {
392 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->requestMovementOn(category);
393 }
394
395 void requestMovementOffWithCategory(int category) {
396 reinterpret_cast<NameObjExecuteHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_NameObjExecuteHolder))->requestMovementOff(category);
397 }
398
399 void MR::findActorLightInfo(const LiveActor *pActor) {
400 MR::getSceneObj<NameObjExecuteHolder*>(SceneObj_NameObjExecuteHolder)->getConnectToSceneInfo(pActor)->findLightInfo();
401 }
402};
403
404NameObjExecuteHolder::NameObjExecuteHolder(int count) : NameObj("connectToScene情報保持") {
405 mExecuteCount = count;
406 mExecuteArray = 0;
407 _14 = 0;
408 _18 = 0;
409 _19 = 0;
410 _1A = 0;
411 _1B = 0;
412 _1C = 0;
413 mExecuteArray = new NameObjExecuteInfo[mExecuteCount];
414}
415
416NameObjExecuteHolder::~NameObjExecuteHolder() {
417
418}
The basis of a drawable actor that can contain states (see: Nerve)
Definition LiveActor.hpp:24
The most basic form of an object.
Definition NameObj.hpp:11
s16 mExecutorIdx
The index into the NameObjExecuteInfo array.
Definition NameObj.hpp:40
Class that executes NameObjCategoryList instances.