SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
MechaKoopaPartsArm.cpp
1#include "Game/MapObj/MechaKoopaPartsArm.hpp"
2#include "Game/Util.hpp"
3
4MechaKoopaPartsArm::MechaKoopaPartsArm(const char *pName) : MapObjActor(pName) {
5 mIsRightArm = false;
6}
7
10 mIsRightArm = isObjectName("MechaKoopaPartsArmRight");
12 info.setupHioNode("地形オブジェ");
13 info.setupDefaultPos();
14 info.setupConnectToScene();
15 info.setupEffect(nullptr);
16 info.setupSound(6);
17 info.setupNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvWaitRear::sInstance);
18 info.setupRotator();
19
20 if (mIsRightArm) {
21 info.setupRailMover();
22 info.setupBaseMtxFollowTarget();
23 }
24
25 initialize(rIter, info);
26 MapObjActorUtil::startRotator(this);
27}
28
29void MechaKoopaPartsArm::exeWait() {
30 if (MapObjActorUtil::isRotatorMoving(this)) {
31 if (isNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvWaitFront::sInstance)) {
32 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveStartRear::sInstance);
33 }
34 else {
35 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveStartFront::sInstance);
36 }
37 }
38}
39
40void MechaKoopaPartsArm::exeMoveStart() {
41 if (MR::isFirstStep(this)) {
42 MapObjActorUtil::pauseRotator(this);
43
44 if (isNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveStartFront::sInstance)) {
45 MR::startBck(this, "Front", nullptr);
46 }
47 else {
48 MR::startBck(this, "Rear", nullptr);
49 }
50
51 MR::startSound(this, "SE_OJ_M_KOOPA_ARM_START", -1, -1);
52 if (MR::isOnPlayer(this)) {
53 MR::shakeCameraNormal();
54 MR::tryRumblePadMiddle(this, 0);
55 }
56 }
57
58 if (MR::isBckStopped(this)) {
59 if (isNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveStartFront::sInstance)) {
60 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveFront::sInstance);
61 }
62 else {
63 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveRear::sInstance);
64 }
65 }
66}
67
68void MechaKoopaPartsArm::exeMove() {
69 MR::startLevelSound(this, "SE_OJ_LV_M_KOOPA_ARM_MOVE", -1, -1, -1);
70
71 if (!MapObjActorUtil::isRotatorMoving(this)) {
72 MR::startSound(this, "SE_OJ_M_KOOPA_ARM_END", -1, -1);
73
74 if (isNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveFront::sInstance)) {
75 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvWaitFront::sInstance);
76 }
77 else {
78 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvWaitRear::sInstance);
79 }
80 }
81}
82
83void MechaKoopaPartsArm::exeBreakStart() {
84 if (MR::isFirstStep(this)) {
85 MR::startBck(this, "BreakStart", nullptr);
86 MR::startSound(this, "SE_OJ_M_KOOPA_ARM_FALL_ST", -1, -1);
87 MapObjActorUtil::pauseRotator(this);
88 }
89
90 if (MR::isBckStopped(this)) {
91 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvBreak::sInstance);
92 }
93}
94
95void MechaKoopaPartsArm::exeBreak() {
96 if (MR::isFirstStep(this)) {
97 MR::emitEffect(this, "Spark");
98 MR::emitEffect(this, "BlackSmoke");
99 MapObjActorUtil::startRailMover(this);
100 }
101
102 MR::startLevelSound(this, "SE_OJ_LV_M_KOOPA_ARM_FALL", -1, -1, -1);
103 if (MapObjActorUtil::isRailMoverReachedEnd(this)) {
104 MR::startSound(this, "SE_OJ_M_KOOPA_ARM_BREAK", -1, -1);
105 kill();
106 }
107}
108
109void MechaKoopaPartsArm::initCaseUseSwitchB(const MapObjActorInitInfo &rInfo) {
110 if (mIsRightArm) {
111 MR::FunctorV0M<MechaKoopaPartsArm *, void (MechaKoopaPartsArm::*)()> breakFunc = MR::Functor<MechaKoopaPartsArm>(this, &MechaKoopaPartsArm::startBreak);
112 MR::listenStageSwitchOnB(this, breakFunc);
113 }
114}
115
116void MechaKoopaPartsArm::initCaseNoUseSwitchB(const MapObjActorInitInfo &) {
117
118}
119
120void MechaKoopaPartsArm::startBreak() {
121 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvBreakStart::sInstance);
122}
123
124namespace NrvMechaKoopaPartsArm {
125 INIT_NERVE(MechaKoopaPartsArmNrvWaitFront);
126 INIT_NERVE(MechaKoopaPartsArmNrvWaitRear);
127 INIT_NERVE(MechaKoopaPartsArmNrvMoveStartFront);
128 INIT_NERVE(MechaKoopaPartsArmNrvMoveStartRear);
129 INIT_NERVE(MechaKoopaPartsArmNrvMoveFront);
130 INIT_NERVE(MechaKoopaPartsArmNrvMoveRear);
131 INIT_NERVE(MechaKoopaPartsArmNrvBreakStart);
132 INIT_NERVE(MechaKoopaPartsArmNrvBreak);
133
134 void MechaKoopaPartsArmNrvBreak::execute(Spine *pSpine) const {
135 MechaKoopaPartsArm* arm = reinterpret_cast<MechaKoopaPartsArm*>(pSpine->mExecutor);
136 arm->exeBreak();
137 }
138
139 void MechaKoopaPartsArmNrvBreakStart::execute(Spine *pSpine) const {
140 MechaKoopaPartsArm* arm = reinterpret_cast<MechaKoopaPartsArm*>(pSpine->mExecutor);
141 arm->exeBreakStart();
142 }
143
144 void MechaKoopaPartsArmNrvMoveRear::execute(Spine *pSpine) const {
145 MechaKoopaPartsArm* arm = reinterpret_cast<MechaKoopaPartsArm*>(pSpine->mExecutor);
146 arm->exeMove();
147 }
148
149 void MechaKoopaPartsArmNrvMoveFront::execute(Spine *pSpine) const {
150 MechaKoopaPartsArm* arm = reinterpret_cast<MechaKoopaPartsArm*>(pSpine->mExecutor);
151 arm->exeMove();
152 }
153
154 void MechaKoopaPartsArmNrvMoveStartRear::executeOnEnd(Spine *pSpine) const {
155 MechaKoopaPartsArm* arm = reinterpret_cast<MechaKoopaPartsArm*>(pSpine->mExecutor);
156 MapObjActorUtil::resumeAllMapPartsFunctions(arm);
157 }
158
159 void MechaKoopaPartsArmNrvMoveStartRear::execute(Spine *pSpine) const {
160 MechaKoopaPartsArm* arm = reinterpret_cast<MechaKoopaPartsArm*>(pSpine->mExecutor);
161 arm->exeMoveStart();
162 }
163
164 void MechaKoopaPartsArmNrvMoveStartFront::executeOnEnd(Spine *pSpine) const {
165 MechaKoopaPartsArm* arm = reinterpret_cast<MechaKoopaPartsArm*>(pSpine->mExecutor);
166 MapObjActorUtil::resumeAllMapPartsFunctions(arm);
167 }
168
169 void MechaKoopaPartsArmNrvMoveStartFront::execute(Spine *pSpine) const {
170 MechaKoopaPartsArm* arm = reinterpret_cast<MechaKoopaPartsArm*>(pSpine->mExecutor);
171 arm->exeMoveStart();
172 }
173
174 void MechaKoopaPartsArmNrvWaitRear::execute(Spine *pSpine) const {
175 MechaKoopaPartsArm* arm = reinterpret_cast<MechaKoopaPartsArm*>(pSpine->mExecutor);
176 arm->exeWait();
177 }
178
179 void MechaKoopaPartsArmNrvWaitFront::execute(Spine *pSpine) const {
180 MechaKoopaPartsArm* arm = reinterpret_cast<MechaKoopaPartsArm*>(pSpine->mExecutor);
181 arm->exeWait();
182 }
183};
184
185MechaKoopaPartsArm::~MechaKoopaPartsArm() {
186
187}
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
Definition Spine.hpp:9