SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
CapsuleCage.cpp
1#include "Game/MapObj/CapsuleCage.hpp"
2
3CapsuleCage::CapsuleCage(const char *pName) : MapObjActor(pName) {
4 mInfo = nullptr;
5}
6
7void CapsuleCage::init(const JMapInfoIter &rIter) {
10 MapObjActorUtil::setupInitInfoSimpleMapObj(&info);
11 info.setupProjmapMtx(false);
12 info.setupNerve(&NrvCapsuleCage::CapsuleCageNrvWait::sInstance);
13 initialize(rIter, info);
14 MR::setBodySensorType(this, 88);
15
16 if (!MR::initActorCamera(this, rIter, &mInfo)) {
17 mInfo = nullptr;
18 }
19}
20
21void CapsuleCage::exeStartCamera() {
22 if (MR::isFirstStep(this)) {
23 MR::startActorCameraTargetSelf(this, mInfo, -1);
24 }
25
26 if (MR::isStep(this, 50)) {
27 setNerve(&NrvCapsuleCage::CapsuleCageNrvOpen::sInstance);
28 }
29}
30
31void CapsuleCage::exeOpen() {
32 if (MR::isFirstStep(this)) {
33 MR::startAllAnim(this, "Move");
34 MR::startSound(this, "SE_OJ_CAPSULE_CAGE_BREAK", -1, -1);
35 MR::tryRumblePadWeak(this, 0);
36 MR::shakeCameraWeak();
37 }
38
39 if (MR::isBckStopped(this)) {
40 MR::tryRumblePadWeak(this, 0);
41 MR::shakeCameraWeak();
42
43 if (mInfo != nullptr) {
44 setNerve(&NrvCapsuleCage::CapsuleCageNrvEndCamera::sInstance);
45 }
46 else {
47 kill();
48 }
49 }
50}
51
52void CapsuleCage::kill() {
53 if (mInfo != nullptr) {
54 MR::endActorCamera(this, mInfo, false, -1);
55 MR::endDemo(this, cDemoCameraName);
56 }
57
58 MapObjActor::kill();
59}
60
61void CapsuleCage::connectToScene(const MapObjActorInitInfo &rInfo) {
62 MR::connectToSceneIndirectMapObj(this);
63}
64
65void CapsuleCage::initCaseUseSwitchB(const MapObjActorInitInfo &rInfo) {
66 MR::FunctorV0M<CapsuleCage *, void (CapsuleCage::*)()> openFunc = MR::Functor_Inline<CapsuleCage>(this, &CapsuleCage::startOpen);
67 MR::listenStageSwitchOnB(this, openFunc);
68}
69
70void CapsuleCage::startOpen() {
71 MR::invalidateClipping(this);
72
73 if (mInfo != nullptr) {
74 MR::requestStartDemoWithoutCinemaFrame(this, cDemoCameraName, &NrvCapsuleCage::CapsuleCageNrvStartCamera::sInstance, nullptr);
75 }
76 else {
77 setNerve(&NrvCapsuleCage::CapsuleCageNrvOpen::sInstance);
78 }
79}
80
81void CapsuleCage::exeEndCamera() {
82 if (MR::isStep(this, 0x3C)) {
83 kill();
84 }
85}
86
87namespace NrvCapsuleCage {
88 INIT_NERVE(CapsuleCageNrvWait);
89 INIT_NERVE(CapsuleCageNrvStartCamera);
90 INIT_NERVE(CapsuleCageNrvOpen);
91 INIT_NERVE(CapsuleCageNrvEndCamera);
92};
93
94void CapsuleCage::initCaseNoUseSwitchB(const MapObjActorInitInfo &) {
95
96}
97
98void CapsuleCage::initCaseNoUseSwitchA(const MapObjActorInitInfo &) {
99
100}
101
102void CapsuleCage::initCaseUseSwitchA(const MapObjActorInitInfo &) {
103
104}
105
106CapsuleCage::~CapsuleCage() {
107
108}
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.