SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
ScenarioSelectStar.cpp
1#include "Game/Map/ScenarioSelectStar.hpp"
2#include "Game/MapObj/PowerStar.hpp"
3#include "Game/Util.hpp"
4//#include <JSystem/JMath/JMATrigonometric.hpp>
5
6ScenarioSelectStar::ScenarioSelectStar(EffectSystem *pSystem) : MultiSceneActor("シナリオ選択のスター", "PowerStar", false),
7 _44(0), mFrame(1), _4C(0), _50(0), _54(0.0f), _5C(gZeroVec), _68(gZeroVec) {
8 _74 = 60;
9 _78 = 1.0f;
10 initEffect(pSystem, 0, "ScenarioStar");
11 }
12
14 initNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvNotPointing::sInstance);
15}
16
17void ScenarioSelectStar::calcViewAndEntry() {
18 if (isNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvAppear::sInstance) || !MultiScene::isLessEqualStep(this, _74 + 1)) {
19 MultiSceneActor::calcViewAndEntry();
20 }
21}
22
23void ScenarioSelectStar::appear() {
24 mScale.x = 0.89999998f;
25 mScale.y = 0.89999998f;
26 mScale.z = 0.89999998f;
27 _50 = 0;
28 _54 = 0.0f;
29 updatePos();
30 MultiScene::startBtp(this, "PowerStar");
31 MultiScene::startBva(this, "PowerStar");
32 MultiScene::setBtpFrameAndStop(this, PowerStar::getBtpFrameCurrentStage(mFrame));
33 MultiScene::setBvaFrameAndStop(this, _44 == 0 ? 1.0f : 0.0f);
34 MultiSceneActor::appear();
35 setNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvAppear::sInstance);
36}
37
38void ScenarioSelectStar::kill() {
39 MultiScene::forceDeleteEffectAll(this);
40 MultiSceneActor::kill();
41}
42
43void ScenarioSelectStar::tryPointing() {
44 _50 = 1;
45
46 if (isNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvNotPointing::sInstance) || isNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvEndPointing::sInstance)) {
47 setNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvPointing::sInstance);
48 }
49}
50
51void ScenarioSelectStar::select() {
52 setNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvSelected::sInstance);
53}
54
55void ScenarioSelectStar::notSelect() {
56 setNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvNotSelected::sInstance);
57}
58
59bool ScenarioSelectStar::isAppearEnd() const {
60 bool ret = false;
61
62 if (!_30 && !isNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvAppear::sInstance)) {
63 ret = true;
64 }
65
66 return ret;
67}
68
69void ScenarioSelectStar::setup(s32 a1, int a2, const TVec3f &a3, s32 a4) {
70 _44 = a2;
71 mFrame = a1;
72 _5C.set(a3);
73 _4C = a4;
74
75 mRotation.set(0.0f, 0.0f, (150.0f * a4));
76 int v7 = _4C;
77 _74 = 15 * v7 + 60;
78 _58 = 15 * v7 + ((v7 % 2) ? 0 : 0x5A);
79}
80
81void ScenarioSelectStar::control() {
82 _50 = 0;
83 mRotation.z = MR::modAndSubtract(mRotation.z + _54, 360.0f, 0.0f);
84
85 if (isNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvNotPointing::sInstance)
86 || isNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvPointing::sInstance)
87 || isNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvEndPointing::sInstance)) {
88 _58++;
89 updatePos();
90 }
91}
92
93bool ScenarioSelectStar::tryEndPointing() {
94 if (!_50) {
95 setNerve(&NrvScenarioSelectStar::ScenarioSelectStarNrvEndPointing::sInstance);
96 return true;
97 }
98
99 return false;
100}
101
102/*
103void ScenarioSelectStar::updatePos() {
104 f32 mod = MR::modAndSubtract(360.0f * (_58 / 180.0f), 360.0f, 0.0f);
105 //f32 val = MR::sin_inline(mod);
106
107 _58 = mod;
108}
109*/
110
111void ScenarioSelectStar::exeAppear() {
112 if (MultiScene::isStep(this, _74)) {
113 MultiScene::startBck(this, "ScenarioAppear");
114 MR::startSystemSE("SE_OJ_SCEN_SEL_STAR_APPEAR", -1, -1);
115 }
116
117 if (MultiScene::isStep(this, _74 + 1)) {
118 if (_44 == 1) {
119 MultiScene::emitEffect(this, "ClearStarLight");
120 }
121 else {
122 MultiScene::emitEffect(this, "Light");
123 }
124 }
125
126 if (MultiScene::isGreaterStep(this, _74)) {
127 MultiScene::setNerveAtBckStopped(this, &NrvScenarioSelectStar::ScenarioSelectStarNrvNotPointing::sInstance);
128 }
129}
130
131void ScenarioSelectStar::exeNotPointing() {
132 if (MultiScene::isFirstStep(this)) {
133 mScale.x = 0.89999998f;
134 mScale.y = 0.89999998f;
135 mScale.z = 0.89999998f;
136 _54 = 1.5f;
137 }
138}
139
140void ScenarioSelectStar::exePointing() {
141 if (MultiScene::isFirstStep(this)) {
142 MR::startSystemSE("SE_SY_CURSOR_1", -1, -1);
143 MR::tryRumblePadWeak(this, 0);
144 _54 = 3.0f;
145 }
146
147 if (MultiScene::isLessStep(this, 20)) {
148 f32 rate = MultiScene::calcNerveRate(this, 20);
149 f32 scale = MR::getScaleWithReactionValueZeroToOne(rate, 1.5f, -0.25f);
150 f32 linerVal = MR::getLinerValue(scale, 0.89999998f, 1.5f, 1.0f);
151 mScale.setAll(linerVal);
152 }
153 else {
154 mScale.x = 1.5f;
155 mScale.y = 1.5f;
156 mScale.z = 1.5f;
157 }
158
159 tryEndPointing();
160}
161
162void ScenarioSelectStar::exeEndPointing() {
163 if (MultiScene::isFirstStep(this)) {
164 _54 = 1.5f;
165 }
166
167 f32 easeOut = MR::getEaseOutValue(MultiScene::calcNerveRate(this, 10), 1.5f, 0.89999998f, 1.0f);
168 mScale.setAll(easeOut);
169 MultiScene::setNerveAtStep(this, &NrvScenarioSelectStar::ScenarioSelectStarNrvNotPointing::sInstance, 10);
170}
171
172void ScenarioSelectStar::exeSelected() {
173 if (MultiScene::isFirstStep(this)) {
174 MultiScene::emitEffect(this, "Select");
175 MR::tryRumblePadMiddle(this, 0);
176 _68.set(mTranslation);
177 _54 = 3.0f;
178 _78 = mScale.x;
179 }
180
181 mScale.setAll(MultiScene::calcNerveValue(this, 40, _78, 1.5f));
182 MultiScene::setNerveAtStep(this, &NrvScenarioSelectStar::ScenarioSelectStarNrvSelectedMove::sInstance, 40);
183}
184
185void ScenarioSelectStar::exeSelectedMove() {
186 if (MultiScene::isFirstStep(this)) {
187 mScale.x = 1.5f;
188 mScale.y = 1.5f;
189 mScale.z = 1.5f;
190 }
191
192 if (MultiScene::isStep(this, 60)) {
193 MR::startSystemSE("SE_DM_SENARIO_SE_ACCEL", -1, -1);
194 }
195
196 if (MultiScene::isLessStep(this, 60)) {
197 f32 rate = 1.0f - MultiScene::calcNerveEaseOutRate(this, 60);
198 mTranslation.scale(rate, _68);
199 _54 = MR::getLinerValue(rate, 3.0f, 6.0f, 1.0f);
200 }
201 else {
202 mTranslation.x = 0.0f;
203 mTranslation.y = 0.0f;
204 mTranslation.z = 0.0f;
205 _54 = MR::getLinerValue(MultiScene::calcNerveRate(this, 60, 180), 6.0f, 20.0f, 1.0f);
206 }
207}
208
209void ScenarioSelectStar::exeNotSelected() {
210 s32 v2 = 10 * _4C;
211
212 if (MultiScene::isFirstStep(this)) {
213 _54 = 1.5f;
214 }
215
216 if (MultiScene::isStep(this, v2)) {
217 _54 = 0.0f;
218 mRotation.z = 150.0f * _4C;
219 MultiScene::startBck(this, "ScenarioHide");
220 MultiScene::deleteEffectAll(this);
221 }
222
223 if (MultiScene::isGreaterStep(this, v2)) {
224 if (MultiScene::isBckStopped(this)) {
225 kill();
226 }
227 }
228}
229
230ScenarioSelectStar::~ScenarioSelectStar() {
231
232}
233
234namespace NrvScenarioSelectStar {
235 INIT_NERVE(ScenarioSelectStarNrvAppear)
236 INIT_NERVE(ScenarioSelectStarNrvNotPointing)
237 INIT_NERVE(ScenarioSelectStarNrvPointing)
238 INIT_NERVE(ScenarioSelectStarNrvEndPointing)
239 INIT_NERVE(ScenarioSelectStarNrvSelected)
240 INIT_NERVE(ScenarioSelectStarNrvSelectedMove)
241 INIT_NERVE(ScenarioSelectStarNrvNotSelected)
242};
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.