SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
MapPartsAppearController.cpp
1#include "Game/MapObj/MapPartsAppearController.hpp"
2
3MapPartsAppearController::MapPartsAppearController(LiveActor *pActor) : MapPartsFunction(pActor, "出現制御") {
4 mSignMotionType = 0;
5 mPostureHolder = nullptr;
6 _20 = 0;
7}
8
10 MapPartsFunction::initNerve(&NrvMapPartsAppearController::HostTypeWait::sInstance);
11 initSwitchMessenger(rIter);
12 MR::getMapPartsArgSignMotionType(&mSignMotionType, rIter);
13 mPostureHolder = new PostureHolder(mHost);
14}
15
16void MapPartsAppearController::start() {
17 MapPartsFunction::setNerve(&NrvMapPartsAppearController::HostTypeWait::sInstance);
18}
19
20void MapPartsAppearController::end() {
21 MapPartsFunction::setNerve(&NrvMapPartsAppearController::HostTypeWait::sInstance);
22}
23
24void MapPartsAppearController::storeCurrentPosture() {
25 mPostureHolder->store(mHost);
26}
27
28void MapPartsAppearController::initSwitchMessenger(const JMapInfoIter &rIter) {
29 if (MR::isExistStageSwitchAppear(rIter)) {
30 void (MapPartsAppearController::*k)(void) = &MapPartsAppearController::startKill;
31 void (MapPartsAppearController::*s)(void) = &MapPartsAppearController::startAppear;
32 MR::listenNameObjStageSwitchOnOffAppear(this, MR::createStageSwitchCtrl(this, rIter), MR::Functor(this, s), MR::Functor(this, k));
33 }
34}
35
36s32 MapPartsAppearController::receiveMsg(u32 msg) {
37 if (msg == 207) {
38 if (MR::isDead(mHost)) {
39 return 0;
40 }
41
42 if (!isNerve(&NrvMapPartsAppearController::HostTypeWait::sInstance)) {
43 return 0;
44 }
45
46 if (MR::hasMapPartsVanishSignMotion(mSignMotionType)) {
47 setNerve(&NrvMapPartsAppearController::HostTypeDisappear::sInstance);
48 return 1;
49 }
50 else {
51 killHost();
52 return 1;
53 }
54 }
55 else {
56 return 0;
57 }
58}
59
60void MapPartsAppearController::startAppear() {
61 if (MR::isValidSwitchAppear(mHost) && !_20) {
62 if (isNerve(&NrvMapPartsAppearController::HostTypeDisappear::sInstance)) {
63 setNerve(&NrvMapPartsAppearController::HostTypeWait::sInstance);
64 }
65
66 appearHost();
67 _20 = 1;
68 }
69}
70
71void MapPartsAppearController::startKill() {
72 if (MR::isValidSwitchAppear(mHost)) {
73 _20 = 0;
74 if (!MR::isDead(mHost)) {
75 if (isNerve(&NrvMapPartsAppearController::HostTypeWait::sInstance)) {
76 if (MR::hasMapPartsVanishSignMotion(mSignMotionType)) {
77 setNerve(&NrvMapPartsAppearController::HostTypeDisappear::sInstance);
78 }
79 else {
80 killHost();
81 }
82 }
83 }
84 }
85}
86
87void MapPartsAppearController::appearHost() {
88 if (MR::isDead(mHost)) {
89 mHost->appear();
90 mPostureHolder->store(mHost);
91 }
92
93 if (MR::isHiddenModel(mHost)) {
94 MR::showModel(mHost);
95 }
96}
97
98void MapPartsAppearController::killHost() {
99 if (!MR::isDead(mHost)) {
100 mHost->kill();
101 mPostureHolder->restore(mHost);
102 }
103}
104
105void MapPartsAppearController::exeDisappear() {
106 s32 div = getStep() < 218 ? 13 : 6;
107 if (getStep() % div) {
108 LiveActor* host = mHost;
109 if (MR::isHiddenModel(host)) {
110 MR::showModel(host);
111 }
112 else {
113 MR::hideModel(host);
114 }
115 }
116
117 if (isStep(436)) {
118 setNerve(&NrvMapPartsAppearController::HostTypeWait::sInstance);
119 MR::showModel(mHost);
120 killHost();
121 }
122}
123
124namespace NrvMapPartsAppearController {
125 INIT_NERVE(HostTypeWait);
126 INIT_NERVE(HostTypeDisappear);
127
128 void HostTypeDisappear::execute(Spine *pSpine) const {
129 MapPartsAppearController* ctrl = reinterpret_cast<MapPartsAppearController*>(pSpine->mExecutor);
130 ctrl->exeDisappear();
131 }
132
133 void HostTypeWait::execute(Spine *pSpine) const {
134
135 }
136};
137
138MapPartsAppearController::~MapPartsAppearController() {
139
140}
The basis of a drawable actor that can contain states (see: Nerve)
Definition LiveActor.hpp:24
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
Definition Spine.hpp:9