SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
SpinDriver.cpp
1#include "Game/MapObj/SpinDriver.hpp"
2#include "Game/MapObj/SpinDriverUtil.hpp"
3#include <cstdio>
4#include <cstring>
5
6SpinDriver::SpinDriver(const char *pName) : LiveActor(pName),
7 _8C(nullptr), mShootPath(nullptr), mSpinDriverCamera(nullptr), _98(0, 0, 0, 1), _A8(0, 0, 0, 1),
8 _B8(0, 0, 0), _C4(0, 0, 0), _D0(0, 0, 1), _DC(0, 0, 0), _E8(0, 1, 0), _F4(0, 0, 0), _104(0.0f), _100(40.0f), _108(0.0f), _10C(0, 0, 0) {
9
10 _11C = 0.0f;
11 _120 = -1.0f;
12 _124 = 300;
13 _128 = -1;
14 _12C = 240;
15 _130 = 270;
16 _134 = 0.0;
17 _138 = 1;
18 _13C = 0;
19 _140 = 0;
20 _141 = 1;
21 _142 = 0;
22}
23
24void SpinDriver::init(const JMapInfoIter &rIter) {
25 MR::initDefaultPos(this, rIter);
26 initModelManagerWithAnm("SpinDriver", nullptr, false);
27 MR::connectToSceneNoSilhouettedMapObjStrongLight(this);
28 initShootPath(rIter);
29 MR::offCalcGravity(this);
30 TVec3f gravityVector;
31 MR::calcGravityVectorOrZero(this, &gravityVector, nullptr, 0);
32 if (MR::isNearZero(gravityVector, 0.001f)) {
33 gravityVector.set(0.0f, -1.0f, 0.0f);
34 }
35
36 mGravity.set(gravityVector);
37 initHitSensor(1);
38 TVec3f sensorOffs;
39 sensorOffs.x = 0.0f;
40 sensorOffs.y = 0.0f;
41 sensorOffs.z = 0.0f;
42 MR::addHitSensor(this, "body", 0x64, 0x10, 300.0f, sensorOffs);
43 initEffectKeeper(0, nullptr, false);
44 initSound(6, false);
45 initEventCamera(rIter);
46 initNerve(&NrvSpinDriver::SpinDriverNrvWait::sInstance);
47 MR::initShadowVolumeFlatModel(this, "SpinDriverShadow", MR::getJointMtx(this, "SpinDriver"));
48 initParamFromJMapInfo(rIter);
49 MR::setClippingFar200m(this);
50
51 if (MR::useStageSwitchReadAppear(this, rIter)) {
52 MR::syncStageSwitchAppear(this);
53 makeActorDead();
54 mSpinDriverCamera->initAppearCamera(rIter, this);
55
56 }
57 else {
58 makeActorAppeared();
59 }
60
61 MR::useStageSwitchSleep(this, rIter);
62}
63
64void SpinDriver::initAfterPlacement() {
65 SpinDriverUtil::setShadowAndClipping(this, &_10C, _120, 300.0f, &_118);
66}
67
68void SpinDriver::initParamFromJMapInfo(const JMapInfoIter &rIter) {
69 if (!mShootPath) {
70 MR::getJMapInfoArg0NoInit(rIter, &_100);
71 }
72 else {
73 MR::getJMapInfoArg0NoInit(rIter, &_124);
74 }
75
76 _120 = -1.0f;
77 MR::getJMapInfoArg1NoInit(rIter, &_120);
78 s32 arg2 = 0;
79 if (MR::getJMapInfoArg2NoInit(rIter, &arg2)) {
80 _138 = arg2 != 0;
81 }
82
83 s32 arg4 = 0;
84 if (MR::getJMapInfoArg4NoInit(rIter, &arg4)) {
85 _142 = !(arg4 - 1);
86 }
87}
88
89void SpinDriver::initShootPath(const JMapInfoIter &rIter) {
90 if (MR::isConnectedWithRail(rIter)) {
91 mShootPath = new SpinDriverShootPath();
92 _134 = 0.0f;
93 MR::getJMapInfoArg5NoInit(rIter, &_134);
94 mShootPath->initUsingParabolic(rIter, mPosition);
95 mShootPath->calcInitPose(&_E8, &_D0, &_DC, _134);
96 }
97 else {
98 Mtx mtx;
99 MR::makeMtxRotate(mtx, mRotation);
100 f32 z = mtx[2][0];
101 f32 y = mtx[1][0];
102 f32 x = mtx[0][0];
103 _DC.set(x, y, z);
104 z = mtx[2][1];
105 y = mtx[1][1];
106 x = mtx[0][1];
107 _E8.set(x, y, z);
108 z = mtx[2][2];
109 y = mtx[1][2];
110 x = mtx[0][2];
111 _D0.set(x, y, z);
112 }
113}
114
115void SpinDriver::initEventCamera(const JMapInfoIter &rIter) {
116 mSpinDriverCamera = new SpinDriverCamera();
117 mSpinDriverCamera->init(rIter, this);
118 MR::isConnectedWithRail(rIter);
119}
120
121void SpinDriver::appear() {
122 LiveActor::appear();
123 MR::invalidateClipping(this);
124 if (mSpinDriverCamera->isUseAppearCamera(this)) {
125 MR::requestStartDemo(this, "出現", &NrvSpinDriver::SpinDriverNrvAppear::sInstance, &NrvSpinDriver::SpinDriverNrvTryDemo::sInstance);
126 }
127 else {
128 setNerve(&NrvSpinDriver::SpinDriverNrvAppear::sInstance);
129 }
130}
131
132void SpinDriver::makeActorAppeared() {
133 LiveActor::makeActorAppeared();
134 setNerve(&NrvSpinDriver::SpinDriverNrvWait::sInstance);
135}
136
137void SpinDriver::makeActorDead() {
138 if (_8C) {
139 cancelBind();
140 }
141
142 LiveActor::makeActorDead();
143}
144
145void SpinDriver::control() {
146 if (!_141) {
147 TVec3f* pos = MR::getPlayerPos();
148 if (mPosition.squared(*pos) > 122500.0f) {
149 _141 = 1;
150 }
151 }
152
153 if (_13C) {
154 _13C--;
155 }
156
157 f32 v4 = _104 + _108;
158 f32 v5 = ((_104 + _108) - -PI);
159 _140 = _13C > 0;
160 _104 = v4;
161 f32 v6 = fmod((TWO_PI + v5), TWO_PI_D);
162 _104 = -PI + v6;
163 _108 *= 0.94999999f;
164}
165
167 TPos3f position;
168 MR::makeMtxUpFrontPos(&position, _E8, _D0, mPosition);
169 TMtx34f mtx;
170 mtx.identity();
171 f32 var = _104;
172 f32 _sin = sin(var);
173 f32 _cos = cos(var);
174 mtx.mMtx[0][2] = _sin;
175 mtx.mMtx[1][1] = 1.0f;
176 mtx.mMtx[0][0] = _cos;
177 mtx.mMtx[2][0] = -_sin;
178 mtx.mMtx[2][2] = mtx.mMtx[0][0];
179 mtx.mMtx[2][1] = 0.0f;
180 mtx.mMtx[1][2] = 0.0f;
181 mtx.mMtx[1][0] = 0.0f;
182 mtx.mMtx[0][1] = 0.0f;
183 position.concat(position, mtx);
184 MR::setBaseTRMtx(this, position);
185}
186
187bool SpinDriver::receiveOtherMsg(u32 msg, HitSensor *a2, HitSensor *a3) {
188 if (msg == 152) {
189 _13C = 60;
190 return canBind(a2);
191 }
192
193 if (msg == 146) {
194 _13C = 60;
195 if (startBind(a2)) {
196 return true;
197 }
198 }
199
200 if (msg == 147) {
201 if (isNerve(&NrvSpinDriver::SpinDriverNrvShootStart::sInstance)) {
202 return false;
203 }
204
205 if (_8C) {
206 _8C = 0;
207 cancelCamera();
208 return true;
209 }
210 }
211
212 if (msg == 148 && _8C) {
213 _8C = 0;
214 cancelCamera();
215 return true;
216 }
217
218 if (msg == 161 && _8C) {
219 calcBindActorMatrix();
220 return true;
221 }
222
223 return false;
224}
225
226bool SpinDriver::tryStartShoot() {
227 bool isSwingOrPointed = MR::isPadSwing(0) || MR::isPlayerPointedBy2POnTriggerButton();
228
229 if (isSwingOrPointed) {
230 MR::startSound(_8C, "SE_PM_SPIN_ATTACK", -1, -1);
231 if (MR::isInAreaObj("Water", mPosition)) {
232 MR::startSound(this, "SE_PMSPIN_DRV_IN_WATER_1", -1, -1);
233 }
234
235 setNerve(&NrvSpinDriver::SpinDriverNrvShootStart::sInstance);
236 return true;
237 }
238
239 return false;
240}
241
242bool SpinDriver::tryEndCapture() {
243 if (MR::isGreaterStep(this, 40) && PSVECDistance(_B8.toCVec(), mPosition.toCVec()) < 15.0f) {
244 cancelBind();
245 _141 = 0;
246 setNerve(&NrvSpinDriver::SpinDriverNrvWait::sInstance);
247 return true;
248 }
249
250 return false;
251}
252
253bool SpinDriver::tryShoot() {
254 if (MR::isGreaterStep(this, 20)) {
255 setNerve(&NrvSpinDriver::SpinDriverNrvShoot::sInstance);
256 return true;
257 }
258
259 return false;
260}
261
262bool SpinDriver::tryEndShoot() {
263 if (!mShootPath || MR::isGreaterStep(this, _124)) {
264 MR::endBindAndSpinDriverJump(this, _C4);
265 _8C = 0;
266 endCamera();
267 setNerve(&NrvSpinDriver::SpinDriverNrvCoolDown::sInstance);
268 return true;
269 }
270
271 return false;
272}
273
274bool SpinDriver::tryForceCancel() {
275 if (!_8C) {
276 setNerve(&NrvSpinDriver::SpinDriverNrvCoolDown::sInstance);
277 return true;
278 }
279
280 return false;
281}
282
283bool SpinDriver::tryEndCoolDown() {
284 if (MR::isGreaterStep(this, 60)) {
285 setNerve(&NrvSpinDriver::SpinDriverNrvWait::sInstance);
286 return true;
287 }
288
289 return false;
290}
291
292bool SpinDriver::trySwitchOff() {
293 if (MR::isValidSwitchAppear(this) && !MR::isOnSwitchAppear(this)) {
294 kill();
295 return true;
296 }
297
298 return false;
299}
300
301void SpinDriver::exeNonActive() {
302 if (MR::isFirstStep(this)) {
303 MR::validateClipping(this);
304 MR::startBck(this, "Wait", nullptr);
305 MR::startBpk(this, "Wait");
306 }
307
308 bool isSwingOrPointed = MR::isPadSwing(0) || MR::isPlayerPointedBy2POnTriggerButton();
309
310 if (isSwingOrPointed) {
311 f32 v3 = _108;
312 _108 += 0.050000001f;
313 if (v3 > 0.15000001f) {
314 _108 = 0.15000001f;
315 }
316 }
317}
318
319void SpinDriver::exeAppear() {
320 if (MR::isFirstStep(this)) {
321 if (!_142) {
322 MR::startSystemSE("SE_SY_SPIN_DRIVER_APPEAR", -1, -1);
323 MR::startSound(this, "SE_OJ_SPIN_DRV_APPEAR", -1, -1);
324 }
325
326 MR::startBck(this, "Appear", nullptr);
327 mSpinDriverCamera->startAppearCamera(this, _E8, _D0, mPosition);
328 }
329
330 if (MR::isBckStopped(this)) {
331 if (MR::isGreaterStep(this, mSpinDriverCamera->getAppearCameraFrames())) {
332 setNerve(&NrvSpinDriver::SpinDriverNrvWait::sInstance);
333
334 if (mSpinDriverCamera->isUseAppearCamera(this)) {
335 MR::endDemoWaitCameraInterpolating(this, "出現");
336 mSpinDriverCamera->endAppearCamera(this);
337 }
338 }
339 }
340}
341
342void SpinDriver::exeWait() {
343 if (MR::isFirstStep(this)) {
344 MR::validateClipping(this);
345 MR::startBck(this, "Wait", nullptr);
346 MR::startBpk(this, "Wait");
347 }
348
349 bool isSwingOrPointed = MR::isPadSwing(0) || MR::isPlayerPointedBy2POnTriggerButton();
350
351 if (isSwingOrPointed) {
352 _108 += 0.050000001f;
353 }
354
355 if (_13C > 0) {
356 _108 += 0.0080000004f;
357 MR::startLevelSound(this, "SE_OJ_LV_SPIN_DRV_SHINE", -1, -1, -1);
358 if (!_140) {
359 MR::emitEffect(this, "SpinDriverLight");
360 MR::startCSSound("CS_SPIN_BIND", nullptr, 0);
361 }
362 }
363 else {
364 MR::deleteEffect(this, "SpinDriverLight");
365 }
366
367 if (trySwitchOff()) {
368 return;
369 }
370}
371
372void SpinDriver::exeCapture() {
373 if (tryForceCancel()) {
374 MR::deleteEffect(this, "SpinDriverLight");
375 }
376 else {
377 if (MR::isFirstStep(this)) {
378 MR::startBckPlayer("SpinDriverWait", "SpinDriverCapture");
379 MR::startBck(this, "Active", nullptr);
380 MR::emitEffect(this, "SpinDriverLight");
381 }
382
383 MR::startLevelSound(this, "SE_OJ_LV_SPIN_DRV_SHINE", -1, -1, -1);
384 MR::startLevelSound(this, "SE_OJ_LV_SPIN_DRV_CAPTURE", -1, -1, -1);
385 moveBindPosToCenter();
386 _11C = MR::calcNerveRate(this, 40);
387 updateBindActorMatrix(_11C);
388 _108 += 0.0080000004f;
389 MR::tryRumblePadWeak(this, 0);
390 _13C = 60;
391
392 if (!tryStartShoot()) {
393 if (tryEndCapture()) {
394 return;
395 }
396 }
397 }
398}
399
400void SpinDriver::exeShootStart() {
401 if (!tryForceCancel()) {
402 if (MR::isFirstStep(this)) {
403 _F4 = _B8;
404 MR::deleteEffect(this, "SpinDriverLight");
405 MR::emitEffect(this, "SpinDriverStart");
406 MR::startBckPlayer("Spin", "SpinDriverShoot");
407 MR::startBck(this, "Active", nullptr);
408 MR::startBpk(this, "Active");
409 startCamera();
410 }
411
412 if (MR::isStep(this, 4)) {
413 MR::startCSSound("CS_SPIN_DRIVE_SHORT", "SE_SY_CS_SPIN_DRV_START", 0);
414 }
415
416 f32 clamp = MR::clamp(getNerveStep() / 20.0f, 0.0f, 1.0f);
417 f32 v3 = ((2.0f * (clamp - 0.5f)) * (2.0f * (clamp - 0.5f)));
418 f32 dot = v3 * v3;
419 TVec3f upVec;
420 MR::calcUpVec(&upVec, this);
421 TVec3f stack_50;
422 stack_50.set(mPosition - MR::multVec(MR::multVec(upVec, 200.0f), 1.0f - dot));
423 f32 v5 = MR::clamp((2.0f * clamp), 0.0f, 1.0f);
424 _B8.set(MR::multAndAddVec(stack_50, _F4, v5, 1.0f - v5));
425 updateBindActorMatrix((v5 + (_11C * (1.0f - v5))));
426 _108 += 0.039999999f;
427 MR::tryRumblePadMiddle(this, 0);
428 if (tryShoot()) {
429 return;
430 }
431 }
432}
433
434void SpinDriver::exeShoot() {
435 if (!tryForceCancel()) {
436 if (MR::isFirstStep(this)) {
437 calcShootMotionTime();
438
439 if (MR::hasME()) {
440 MR::startSystemME("ME_MAGIC");
441 }
442 else {
443 MR::startSystemSE("SE_SY_S_SPIN_DRV_ME_ALT", -1, -1);
444 }
445
446 MR::startSound(this, "SE_OJ_SPIN_DRV_JUMP", -1, -1);
447 MR::startSound(_8C, "SE_PV_JUMP_JOY", -1, -1);
448
449 if (MR::isInAreaObj("Water", mPosition)) {
450 MR::startSound(this, "SE_PM_SIN_DIV_IN_WATER_2", -1, -1);
451 }
452
453 MR::startBckPlayer("SpaceFlyShortStart", "SpinDriverFlyStart");
454 MR::shakeCameraNormal();
455 MR::tryRumblePadVeryStrong(this, 0);
456 }
457
458 if (mShootPath) {
459 updateBindPosition();
460 updateCamera();
461 calcParabolicBindPose();
462
463 if (MR::isStep(this, _128)) {
464 MR::startBckPlayer("SpaceFlyShort", "SpinDriverFlyLoop");
465 }
466
467 if (MR::isStep(this, _12C)) {
468 MR::startBckPlayer("SpaceFlyEnd", "SpinDriverFlyEnd");
469 }
470
471 if (MR::isLessStep(this, _130)) {
472 MR::startLevelSound(_8C, "SE_PM_LV_SPIN_DRV_FLY", -1, -1, -1);
473 }
474
475 if (MR::isStep(this, _130)) {
476 MR::startBckPlayer("Fall", "SpinDriverFall");
477 }
478 }
479 else {
480 f32 v3 = _100;
481 TVec3f v5(_E8);
482 v5 *= v3;
483 _C4 = v5;
484 }
485
486 if (tryEndShoot()) {
487 return;
488 }
489 }
490}
491
492void SpinDriver::exeCoolDown() {
493 if (MR::isFirstStep(this)) {
494 MR::startBpk(this, "Wait");
495 }
496
497 if (!tryEndCoolDown()) {
498 if (trySwitchOff()) {
499 return;
500 }
501 }
502}
503
504bool SpinDriver::startBind(HitSensor *pSensor) {
505 if (!canStartBind()) {
506 return false;
507 }
508
509 bool isSwingOrPointed = MR::isPadSwing(0) || MR::isPlayerPointedBy2POnTriggerButton();
510
511 if (isSwingOrPointed) {
512 if (MR::hasME()) {
513 MR::startSystemME("ME_MAGIC");
514 }
515 else {
516 MR::startSystemSE("SE_SY_S_SPIN_DRV_ME_ALT", -1, -1);
517 }
518
519 MR::startSound(pSensor->mActor, "SE_PM_SPIN_ATTACK", -1, -1);
520
521 if (MR::isInAreaObj("Water", mPosition)) {
522 MR::startSound(this, "SE_PM_SPIN_DRV_IN_WATER_1", -1, -1);
523 }
524
525 setNerve(&NrvSpinDriver::SpinDriverNrvShootStart::sInstance);
526 }
527 else {
528 if (_138 && _141 && mPosition.squared(pSensor->mPosition) < 57600.0f) {
529 setNerve(&NrvSpinDriver::SpinDriverNrvCapture::sInstance);
530 }
531 else {
532 return false;
533 }
534 }
535
536 _8C = pSensor->mActor;
537 _B8 = mPosition;
538 _C4 = *MR::getPlayerLastMove();
539 f32 mag = PSVECMag(_C4.toCVec());
540 if (mag > 40.0f) {
541 _C4 *= 40.0f / mag;
542 }
543
544 _11C = 0.0f;
545 MtxPtr mtx = _8C->getBaseMtx();
546 TRot3f rotation;
547 rotation.setInline(mtx);
548 rotation.getQuat(_98);
549 _A8 = _98;
550 cSpaceFlyStartFrame = MR::getBckFrameMax(_8C, "SpaceFlyStart");
551 cSpaceFlyEndFrame = MR::getBckFrameMax(_8C, "SpaceFlyEnd");
552 MR::validateClipping(this);
553 return true;
554}
555
556void SpinDriver::cancelBind() {
557 if (_8C) {
558 MR::endBindAndPlayerJump(this, _C4, 0);
559 _8C = nullptr;
560 endCamera();
561 }
562}
563
564void SpinDriver::updateBindPosition() {
565 f32 step = getNerveStep() / (f32)_124;
566 TVec3f stack_20(_B8);
567 TVec3f position;
568 mShootPath->calcPosition(&position, step);
569 _B8 = position;
570 _C4 = position - stack_20;
571}
572
573void SpinDriver::moveBindPosToCenter() {
574 _B8 += _C4;
575 TVec3f stack_24(mPosition - _B8);
576 f32 scalar;
577 MR::separateScalarAndDirection(&scalar, &stack_24, stack_24);
578 f32 v3 = scalar / 120.0f;
579 _C4 += MR::multVec(stack_24, 1.5f, v3);
580 _C4.x *= 0.80000001f;
581 _C4.y *= 0.80000001f;
582 _C4.z *= 0.80000001f;
583}
584
585void SpinDriver::updateBindActorMatrix(f32 a1) {
586 TPos3f rotation;
587 MR::makeMtxUpFrontPos(&rotation, _E8, _D0, mPosition);
588 TQuat4f quat;
589 rotation.makeQuat(quat);
590 _A8.x = _98.x;
591 _A8.y = _98.y;
592 _A8.z = _98.z;
593 _A8.w = _98.w;
594 _A8.slerp(quat, a1);
595}
596
597/*
598void SpinDriver::calcBindActorMatrix() {
599 f32 v3 = (2.0f * _A8.y);
600 f32 v4 = _A8.z;
601 f32 v5 = (2.0f * _A8.x);
602 f32 v6 = (2.0f * _A8.y) * _A8.y;
603 f32 v7 = (2.0f * _A8.w);
604 f32 v8 = (1.0f - ((2.0f * _A8.x) * _A8.x));
605 f32 v9 = ((1.0f - ((2.0f * _A8.x) * _A8.x)) - ((2.0f * _A8.z) * _A8.z));
606 f32 v10 = (((2.0f * _A8.x) * _A8.y) - ((2.0f * _A8.w) * _A8.z));
607 f32 v11 = (((2.0f * _A8.x) * _A8.y) + ((2.0f * _A8.w) * _A8.z));
608 TPos3f pos;
609 pos.mMtx[0][0] = (1.0f - ((2.0f * _A8.y) * _A8.y)) - ((2.0f * _A8.z) * _A8.z);
610 pos.mMtx[0][1] = v10;
611 f32 v12 = (v7 * _A8.y);
612 pos.mMtx[1][1] = v9;
613 f32 v13 = (v7 * _A8.x);
614 pos.mMtx[1][0] = v11;
615 pos.mMtx[2][2] = v8 - v6;
616 pos.mMtx[0][2] = (v5 * v4) + v12;
617 pos.mMtx[1][2] = (v3 * v4) - v13;
618 pos.mMtx[2][0] = (v5 * v4) - v12;
619 pos.mMtx[2][1] = (v3 * v4) + v13;
620 pos.mMtx[0][3] = _B8.x;
621 pos.mMtx[1][3] = _B8.y;
622 pos.mMtx[2][3] = _B8.z;
623 MR::setBaseTRMtx(_8C, pos);
624}
625*/
626
627// SpinDriver::calcParabolicBindPose
628// SpinDriver::turnBindHead
629
630/*
631void SpinDriver::calcShootMotionTime() {
632 s32 v1 = _124;
633 if (v1 < cSpaceFlyEndFrame) {
634 _128 = -1;
635 _12C = 0;
636 _130 = v1;
637 }
638 else {
639 _12C = v1 - 70;
640 _130 = v1 - 20;
641 _128 = (v1 - 70) / 5;
642 }
643}
644*/
645
646void SpinDriver::startCamera() {
647 if (mSpinDriverCamera) {
648 mSpinDriverCamera->start(_E8, _D0, mPosition);
649 }
650}
651
652void SpinDriver::updateCamera() {
653 if (mSpinDriverCamera) {
654 mSpinDriverCamera->update(_C4, _B8);
655 }
656}
657
658void SpinDriver::cancelCamera() {
659 if (mSpinDriverCamera) {
660 mSpinDriverCamera->cancel();
661 }
662}
663
664void SpinDriver::endCamera() {
665 if (mSpinDriverCamera) {
666 mSpinDriverCamera->end();
667 }
668}
669
670bool SpinDriver::canStartBind() const {
671 return isNerve(&NrvSpinDriver::SpinDriverNrvWait::sInstance);
672}
673
674bool SpinDriver::canBind(HitSensor *pSensor) const {
675 if (!canStartBind()) {
676 return false;
677 }
678
679 bool isSwingOrPointed = MR::isPadSwing(0) || MR::isPlayerPointedBy2POnTriggerButton();
680
681 if (isSwingOrPointed) {
682 return true;
683 }
684
685 if (_138 && _141 && mPosition.squared(pSensor->mPosition) < 457600.0f) {
686 return true;
687 }
688
689 return false;
690}
691
692SpinDriver::~SpinDriver() {
693
694}
695
696namespace NrvSpinDriver {
697 INIT_NERVE(SpinDriverNrvTryDemo);
698 INIT_NERVE(SpinDriverNrvNonActive);
699 INIT_NERVE(SpinDriverNrvAppear);
700 INIT_NERVE(SpinDriverNrvWait);
701 INIT_NERVE(SpinDriverNrvCapture);
702 INIT_NERVE(SpinDriverNrvShootStart);
703 INIT_NERVE(SpinDriverNrvShoot);
704 INIT_NERVE(SpinDriverNrvCoolDown);
705
706 void SpinDriverNrvCoolDown::execute(Spine *pSpine) const {
707 SpinDriver* spinDriver = reinterpret_cast<SpinDriver*>(pSpine->mExecutor);
708 spinDriver->exeCoolDown();
709 }
710
711 void SpinDriverNrvShoot::execute(Spine *pSpine) const {
712 SpinDriver* spinDriver = reinterpret_cast<SpinDriver*>(pSpine->mExecutor);
713 spinDriver->exeShoot();
714 }
715
716 void SpinDriverNrvShootStart::execute(Spine *pSpine) const {
717 SpinDriver* spinDriver = reinterpret_cast<SpinDriver*>(pSpine->mExecutor);
718 spinDriver->exeShootStart();
719 }
720
721 void SpinDriverNrvCapture::execute(Spine *pSpine) const {
722 SpinDriver* spinDriver = reinterpret_cast<SpinDriver*>(pSpine->mExecutor);
723 spinDriver->exeCapture();
724 }
725
726 void SpinDriverNrvWait::execute(Spine *pSpine) const {
727 SpinDriver* spinDriver = reinterpret_cast<SpinDriver*>(pSpine->mExecutor);
728 spinDriver->exeWait();
729 }
730
731 void SpinDriverNrvAppear::execute(Spine *pSpine) const {
732 SpinDriver* spinDriver = reinterpret_cast<SpinDriver*>(pSpine->mExecutor);
733 spinDriver->exeAppear();
734 }
735
736 void SpinDriverNrvNonActive::execute(Spine *pSpine) const {
737 SpinDriver* spinDriver = reinterpret_cast<SpinDriver*>(pSpine->mExecutor);
738 spinDriver->exeNonActive();
739 }
740
741 void SpinDriverNrvTryDemo::execute(Spine *pSpine) const {
742
743 }
744};
The basis of a drawable actor that can contain states (see: Nerve)
Definition LiveActor.hpp:24
TVec3f mRotation
3D vector of the actor's rotation.
Definition LiveActor.hpp:96
TVec3f mPosition
3D vector of the actor's position.
Definition LiveActor.hpp:95
TVec3f mGravity
3D vector of the actor's gravity.
Definition LiveActor.hpp:99
virtual MtxPtr getBaseMtx() const
Gets the base matrix of the model used for the actor.
virtual void calcAndSetBaseMtx()
Calculates and sets the base matrix of the actor.
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
Definition Spine.hpp:9