1#include "Game/MapObj/SuperSpinDriver.hpp"
5bool SuperSpinDriver::tryEndCapture() {
6 if (MR::isGreaterStep(
this, 60) && PSVECDistance(_C4.toCVec(),
mPosition.toCVec()) < 15.0f) {
9 setNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvWait::sInstance);
16bool SuperSpinDriver::tryForceCancel() {
18 setNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvCoolDown::sInstance);
25bool SuperSpinDriver::tryShootStart() {
28 if (MR::isPadSwing(0) || MR::isPlayerPointedBy2POnTriggerButton()) {
33 MR::deleteEffect(
this,
"SuperSpinDriverLight");
34 setNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvShootStart::sInstance);
41bool SuperSpinDriver::tryShoot() {
42 if (MR::isGreaterStep(
this, 45)) {
43 setNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvShoot::sInstance);
50bool SuperSpinDriver::tryEndShoot() {
51 if (MR::isGreaterEqualStep(
this, _150)) {
53 setNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvCoolDown::sInstance);
60bool SuperSpinDriver::tryEndCoolDown() {
61 if (MR::isGreaterStep(
this, 60) && _178) {
62 setNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvWait::sInstance);
69bool SuperSpinDriver::trySwitchOff() {
70 if (MR::isValidSwitchAppear(
this) && !MR::isOnSwitchAppear(
this)) {
78void SuperSpinDriver::requestAppear() {
79 MR::invalidateClipping(
this);
81 if (mSpinDriverCamera->isUseAppearCamera(
this)) {
82 MR::requestStartDemo(
this,
"出現", &NrvSuperSpinDriver::SuperSpinDriverNrvAppear::sInstance, &NrvSuperSpinDriver::SuperSpinDriverNrvTryDemo::sInstance);
85 setNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvAppear::sInstance);
89void SuperSpinDriver::requestEmptyAppear() {
90 MR::invalidateClipping(
this);
92 if (mSpinDriverCamera->isUseAppearCamera(
this)) {
93 MR::requestStartDemo(
this,
"出現", &NrvSuperSpinDriver::SuperSpinDriverNrvEmptyAppear::sInstance, &NrvSuperSpinDriver::SuperSpinDriverNrvTryDemo::sInstance);
96 setNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvEmptyAppear::sInstance);
100void SuperSpinDriver::requestActive() {
101 if (isNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvNonActive::sInstance)) {
104 else if (isNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvEmptyNonActive::sInstance)) {
105 requestEmptyAppear();
109void SuperSpinDriver::requestHide() {
110 if (!MR::isDead(
this)) {
111 if (_8C !=
nullptr) {
119void SuperSpinDriver::requestShow() {
120 if (MR::isDead(
this)) {
125void SuperSpinDriver::exeEmptyNonActive() {
126 if (MR::isFirstStep(
this)) {
127 MR::validateClipping(
this);
130 if (isRightToUse()) {
132 setNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvNonActive::sInstance);
136void SuperSpinDriver::exeEmptyAppear() {
137 if (MR::isFirstStep(
this)) {
138 mSpinDriverCamera->startAppearCamera(
this, _100, _E8,
mPosition);
141 MR::startSystemSE(
"SE_SY_SPIN_DRIVER_APPEAR", -1, -1);
142 MR::startSound(
this,
"SE_OJ_S_SPIN_DRV_APPEAR", -1, -1);
146 if (MR::isBckStopped(
this)) {
147 s32 frames = mSpinDriverCamera->getAppearCameraFrames();
149 if (MR::isGreaterStep(
this, frames)) {
150 setNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvEmptyWait::sInstance);
152 if (mSpinDriverCamera->isUseAppearCamera(
this)) {
153 mSpinDriverCamera->endAppearCamera(
this);
154 MR::endDemoWaitCameraInterpolating(
this,
"出現");
160void SuperSpinDriver::exeEmptyWait() {
161 if (MR::isFirstStep(
this)) {
162 MR::validateClipping(
this);
165 if (isRightToUse()) {
167 setNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvWait::sInstance);
171void SuperSpinDriver::exeNonActive() {
172 if (MR::isFirstStep(
this)) {
173 MR::startBck(
this,
"NonActive",
nullptr);
174 MR::validateClipping(
this);
177 addSwingSignRotateY();
180void SuperSpinDriver::exeAppear() {
181 if (MR::isFirstStep(
this)) {
182 mSpinDriverCamera->startAppearCamera(
this, _100, _E8,
mPosition);
185 MR::startSystemSE(
"SE_SY_SPIN_DRIVER_APPEAR", -1, -1);
186 MR::startSound(
this,
"SE_OJ_S_SPIN_DRV_APPEAR", -1, -1);
189 MR::startBck(
this,
"Appear",
nullptr);
193 if (MR::isBckStopped(
this)) {
194 s32 frames = mSpinDriverCamera->getAppearCameraFrames();
196 if (MR::isGreaterStep(
this, frames)) {
197 setNerve(&NrvSuperSpinDriver::SuperSpinDriverNrvWait::sInstance);
199 if (mSpinDriverCamera->isUseAppearCamera(
this)) {
200 mSpinDriverCamera->endAppearCamera(
this);
201 MR::endDemoWaitCameraInterpolating(
this,
"出現");
207void SuperSpinDriver::exeWait() {
208 if (MR::isFirstStep(
this)) {
209 MR::startBck(
this,
"Wait",
nullptr);
210 MR::validateClipping(
this);
213 if (MR::isGreaterStep(
this, sCanBindTime)) {
214 addSwingSignRotateY();
218 MR::startLevelSound(
this,
"SE_OJ_LV_S_SPIN_DRV_SHINE", -1, -1, -1);
221 MR::emitEffect(
this,
"SuperSpinDriverLight");
222 MR::startCSSound(
"CS_SPIN_BIND",
nullptr, 0);
227 MR::deleteEffect(
this,
"SuperSpinDriverLight");
233void SuperSpinDriver::exeCapture() {
234 if (tryForceCancel()) {
235 MR::deleteEffect(
this,
"SuperSpinDriverLight");
238 if (MR::isFirstStep(
this)) {
239 MR::emitEffect(
this,
"SuperSpinDriverLight");
240 MR::startBckPlayer(
"SpinDriverWait",
"SuperSpinDriverCapture");
244 MR::startLevelSound(
this,
"SE_OJ_LV_S_SPIN_DRV_SHINE", -1, -1, -1);
245 MR::startLevelSound(
this,
"SE_OJ_LV_SPIN_DRV_CAPTURE", -1, -1, -1);
246 moveBindPosToCenter();
247 f32 rate = MR::calcNerveRate(
this, 60);
249 updateBindActorPoseToShoot((f64)rate);
250 _144 += 0.0040000002f;
251 MR::tryRumblePadWeak(
this, 0);
254 if (!tryEndCapture()) {
255 if (!tryShootStart()) {
262void SuperSpinDriver::updateShootMotion() {
263 if (MR::isStep(
this, _154)) {
264 MR::startBckPlayer(
"SpaceFlyLoop",
"SuperSpinDriverFlyLoop");
267 if (MR::isLessStep(
this, _158)) {
268 MR::startLevelSound(_8C,
"SE_PM_LV_S_SPIN_DRV_FLY", -1, -1, -1);
271 if (MR::isStep(
this, _158)) {
272 MR::startBckPlayer(
"SpaceFlyEnd",
"SuperSpinDriverFlyEnd");
273 MR::startSound(_8C,
"SE_PM_S_SPIN_DRV_COOL_DOWN", -1, -1);
274 MR::startSound(_8C,
"SE_PV_JUMP_S", -1, -1);
277 if (MR::isStep(
this, _15C)) {
278 MR::startBckPlayer(
"Fall",
"SuperSpinDriverFall");
282void SuperSpinDriver::cancelBind() {
283 if (_8C !=
nullptr) {
284 MR::endBindAndPlayerJump(
this, _D0, 0);
288 mSpinDriverCamera->cancel();
291void SuperSpinDriver::endBind() {
292 MR::endBindAndSpinDriverJump(
this, _D0);
294 mSpinDriverCamera->end();
297void SuperSpinDriver::startPathDraw() {
298 if (mPathDrawer !=
nullptr) {
299 if (MR::isDead(mPathDrawer)) {
300 mPathDrawer->appear();
301 MR::emitEffect(
this,
"EndGlow");
306void SuperSpinDriver::endPathDraw() {
307 if (mPathDrawer !=
nullptr) {
308 if (!MR::isDead(mPathDrawer)) {
309 MR::emitEffect(
this,
"EndGlow");
333void SuperSpinDriver::addSwingSignRotateY() {
336 if (MR::isPadSwing(0) || MR::isPlayerPointedBy2POnTriggerButton()) {
341 f32 v4 = MR::add(_144, 0.1f);
350void SuperSpinDriver::onUse() {
351 if (mEmptyModel !=
nullptr) {
358void SuperSpinDriver::offUse() {
359 if (mEmptyModel !=
nullptr) {
360 mEmptyModel->appear();
363 MR::hideModelAndOnCalcAnim(
this);
372void SuperSpinDriver::exeCoolDown() {
374 MR::isFirstStep(
this);
375 if (!tryEndCoolDown()) {
380void SuperSpinDriver::exeShootOnEnd() {
381 MR::invalidateHitSensor(
this,
"body");
382 mOperateRing->reset();
386 NameObj* createSuperSpinDriverYellow(
const char *pName) {
390 NameObj* createSuperSpinDriverGreen(
const char *pName) {
394 NameObj* createSuperSpinDriverPink(
const char *pName) {
399namespace NrvSuperSpinDriver {
400 INIT_NERVE(SuperSpinDriverNrvTryDemo);
401 INIT_NERVE(SuperSpinDriverNrvEmptyNonActive);
402 INIT_NERVE(SuperSpinDriverNrvEmptyAppear);
403 INIT_NERVE(SuperSpinDriverNrvEmptyWait);
404 INIT_NERVE(SuperSpinDriverNrvNonActive);
405 INIT_NERVE(SuperSpinDriverNrvAppear);
406 INIT_NERVE(SuperSpinDriverNrvWait);
407 INIT_NERVE(SuperSpinDriverNrvCapture);
408 INIT_NERVE(SuperSpinDriverNrvShootStart);
409 INIT_NERVE(SuperSpinDriverNrvShoot);
410 INIT_NERVE(SuperSpinDriverNrvCoolDown);
TVec3f mPosition
3D vector of the actor's position.
The most basic form of an object.