SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
LargeChain.cpp
1#include "Game/MapObj/LargeChain.hpp"
2
3namespace {
4 static f32 sPartsLength = 200.0f;
5};
6
7LargeChain::LargeChain(const char *pName) : LiveActor(pName) {
8 _8C = nullptr;
9 _90 = nullptr;
10 mChainArray = nullptr;
11 mChainCount = 1;
12}
13
14void LargeChain::init(const JMapInfoIter &rIter) {
15 MR::initDefaultPos(this, rIter);
16 s32 chainLen;
17 MR::getJMapInfoArg0NoInit(rIter, &chainLen);
18 mChainCount = chainLen / sPartsLength;
19 createChainParts();
20 MR::connectToSceneMapObjMovement(this);
21
22 if (MR::tryRegisterDemoCast(this, rIter)) {
23 MR::registerDemoActionNerve(this, &NrvLargeChain::LargeChainNrvBreak::sInstance, nullptr);
24 }
25
26 MR::useStageSwitchSleep(this, rIter);
27 initNerve(&NrvLargeChain::LargeChainNrvWait::sInstance);
28 makeActorAppeared();
29}
30
31void LargeChain::makeActorAppeared() {
32 for (s32 i = 0; i < (u32)mChainCount; i++) {
33 mChainArray[i].makeActorAppeared();
34 }
35
36 _8C->makeActorAppeared();
37 _90->makeActorAppeared();
38 LiveActor::makeActorAppeared();
39}
40
41void LargeChain::makeActorDead() {
42 for (s32 i = 0; i < (u32)mChainCount; i++) {
43 mChainArray[i].makeActorDead();
44 }
45
46 _8C->makeActorDead();
47 _90->makeActorDead();
48 LiveActor::makeActorDead();
49}
50
51void LargeChain::exeBreak() {
52 if (MR::isFirstStep(this)) {
53 MR::invalidateClipping(this);
54 invalidateClippingAllChainParts();
55 }
56
57 if (!(getNerveStep() % 5)) {
58 s32 step = getNerveStep() / 5;
59
60 if (step == 0) {
61 _8C->breakChainParts();
62 }
63 else {
64 if (step == mChainCount - 1) {
65 _90->breakChainParts();
66 }
67 }
68
69 mChainArray[step].breakChainParts();
70 if (step == mChainCount - 1) {
71 kill();
72 }
73 }
74}
75
76LargeChainParts::~LargeChainParts() {
77
78}
79
80void LargeChain::invalidateClippingAllChainParts() {
81 for (s32 i = 0; i < (u32)mChainCount; i++) {
82 MR::invalidateClipping(&mChainArray[i]);
83 }
84}
85
86LargeChain::~LargeChain() {
87
88}
89
90namespace NrvLargeChain {
91 INIT_NERVE(LargeChainNrvWait);
92 INIT_NERVE(LargeChainNrvBreak);
93};
s32 mChainCount
The number of chain parts.
LargeChainParts * mChainArray
The array of LargeChainParts.
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
The basis of a drawable actor that can contain states (see: Nerve)
Definition LiveActor.hpp:24