SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
PunchingKinoko.cpp
1#include <revolution.h>
2#include "Game/MapObj/PunchingKinoko.hpp"
3
4PunchingKinoko::PunchingKinoko(const char *pName) : LiveActor(pName),
5 mGroundChecker(nullptr), mScaleController(nullptr), mDelegator(nullptr), _98(-1), _9C(0, 0, 0), _A8(0, 1, 0) {
6 mStarPointerHitCoolDown = 0;
7 _B8 = true;
8 mInvincibleHitCoolDown = -1;
9}
10
12 MR::initDefaultPos(this, rIter);
13 initModelManagerWithAnm("PunchingKinoko", nullptr, false);
14 MR::connectToSceneNoSilhouettedMapObj(this);
15 MR::calcGravity(this);
16 _9C.set(mPosition);
17
18 mGroundChecker = new GroundChecker("頭コリジョン", 70.0f, 0.0f);
19 MR::calcPositionUpOffset(&mGroundChecker->mPosition, this, 130.0f);
20 MR::resetPosition(mGroundChecker);
21 MR::onCalcGravity(mGroundChecker);
22
23 mScaleController = new AnimScaleController(nullptr);
24
25 TVec3f *groundCheckerPos = &mGroundChecker->mPosition;
26 MR::initStarPointerTargetAtPos(this, 70.0f, groundCheckerPos, TVec3f(0, 0, 0));
27
28 initShadow();
29 initSensor();
30 initEffectKeeper(0, nullptr, false);
31 initSound(4, false);
32 initCamera(rIter);
33 initJointControl();
34 initNerve(&NrvPunchingKinoko::PunchingKinokoNrvWait::sInstance);
35
36 makeActorAppeared();
37
38 if (MR::useStageSwitchReadB(this, rIter) != 0) {
39 MR::FunctorV0M<PunchingKinoko *, void (PunchingKinoko::*)()> functor = MR::Functor<PunchingKinoko>(this, &PunchingKinoko::kill);
40 MR::listenStageSwitchOnB(this, functor);
41 }
42 MR::useStageSwitchSleep(this, rIter);
43}
44
45void PunchingKinoko::initSensor() {
46 initHitSensor(2);
47 MR::addHitSensorAtJointEnemy(this, "Head", "Ball", 0x10, 9.18355e-41f, TVec3f(0.0174533f, 0.0174533f, 0.0174533f));
48 MR::addHitSensorEnemy(this, "Body", 0x10, 9.18355e-41f, TVec3f(0.0174533f, 9.18355e-41f, 0.0174533f));
49}
50
51void PunchingKinoko::initShadow() {
52 MR::initShadowController(this, 3);
53 MR::addShadowVolumeSphere(this, "体", 10.0f);
54 MR::onCalcShadowOneTime(this, "体");
55 MR::addShadowVolumeSphere(this, "頭", 10.0f);
56 MR::setShadowDropPositionPtr(this, "頭", &mGroundChecker->mPosition);
57 MR::setShadowDropDirectionPtr(this, "頭", &mGroundChecker->mGravity);
58 MR::addShadowVolumeLine(this, "つた", this, "体", 10.0f, this, "頭", 10.0f);
59}
60
61void PunchingKinoko::initCamera(const JMapInfoIter &rIter) {
62 MR::getJMapInfoArg7WithInit(rIter, &_98);
63 if (_98 != -1) {
64 MR::declareCameraRegisterVec(this, _98, &_9C);
65 }
66}
67
68void PunchingKinoko::initJointControl() {
69 mDelegator = MR::createJointDelegatorWithNullChildFunc(this, &PunchingKinoko::ballMtxCallBack, "Ball");
70}
71
72bool PunchingKinoko::ballMtxCallBack(TPos3f *a1, const JointControllerInfo &joint) {
73 TVec3f stack_8;
74 PSVECSubtract(mGroundChecker->mPosition.toCVec(), mPosition.toCVec(), stack_8.toVec());
75 MR::orthogonalize(a1);
76 if (!MR::normalizeOrZero(&stack_8)) {
77 MR::turnMtxToYDirRate(a1, stack_8, 1.0f);
78 }
79
80 TPos3f stack_14;
81 stack_14.identity();
82
83 MR::scaleMtxToDir(&stack_14, _A8, mScaleController->_C);
84 a1->concat(stack_14, *a1);
85
86 TVec3f *groundCheckerPos = &mGroundChecker->mPosition;
87 a1->mMtx[0][0] = groundCheckerPos->x;
88 a1->mMtx[1][1] = groundCheckerPos->y;
89 a1->mMtx[2][2] = groundCheckerPos->z;
90
91 return true;
92}
93
94void PunchingKinoko::makeActorAppeared() {
95 LiveActor::makeActorAppeared();
96 mGroundChecker->makeActorAppeared();
97}
98
99void PunchingKinoko::kill() {
100 LiveActor::kill();
101}
102
103void PunchingKinoko::makeActorDead() {
104 LiveActor::makeActorDead();
105 mGroundChecker->makeActorDead();
106}
107
108void PunchingKinoko::control() {
109 if (mStarPointerHitCoolDown > 0) {
110 mStarPointerHitCoolDown -= 1;
111 }
112 mScaleController->update();
113 mGroundChecker->movement();
114 MR::reboundVelocityFromCollision(mGroundChecker, 0.0f, 0.0f, 1.0f);
115 if (mInvincibleHitCoolDown > -1) {
116 mInvincibleHitCoolDown -= 1;
117 }
118}
119
121 TPos3f stack_14;
122 TVec3f stack_8;
123 stack_8.setNegatedInline(mGravity);
124 MR::makeMtxUpNoSupportPos(&stack_14, stack_8, mPosition);
125 MR::setBaseTRMtx(this, stack_14);
126 mDelegator->registerCallBack();
127}
128
129void PunchingKinoko::attackSensor(HitSensor *pMySensor, HitSensor *pOtherSensor) {
130 if (!isCrushed()) {
131 if (pMySensor == getSensor("Body")) {
132 if (isNerve(&NrvPunchingKinoko::PunchingKinokoNrvWait::sInstance)) {
133 MR::sendMsgPush(pOtherSensor, pMySensor);
134 }
135 }
136 else if (!isNerve(&NrvPunchingKinoko::PunchingKinokoNrvCrushedEnd::sInstance) || !MR::isSensorPlayer(pOtherSensor) || !MR::sendMsgEnemyAttackFlipWeakJump(pOtherSensor, pMySensor)) {
137 TVec3f stack_3C;
138 TVec3f stack_30;
139 f32 stack_8;
140 MR::separateScalarAndDirection(&stack_8, &stack_3C, mGroundChecker->mVelocity);
141 bool hit = false;
142 if (MR::isSensorPlayer(pOtherSensor)) {
143 if (isEnableHitPlayer()) {
144 if (stack_8 >= 30.0f) {
145 if (stack_8 >= 45.0f) {
146 TVec3f stack_24(stack_3C);
147 stack_24.scaleInline(70.0f);
148 hit = MR::sendMsgEnemyAttackFlipMaximumToDir(pOtherSensor, pMySensor, stack_24);
149 }
150 else {
151 TVec3f stack_18(stack_3C);
152 stack_18.scale(70.0f);
153 hit = MR::sendMsgEnemyAttackFlipToDir(pOtherSensor, pMySensor, stack_18);
154 }
155 if (hit) {
156 MR::startSoundPlayer("SE_PM_WALL_HIT_BODY", -1);
157 MR::scatterStarPiecePlayer(10);
158 }
159 }
160 else {
161 if (stack_8 >= 15.0f) {
162 hit = MR::sendMsgEnemyAttackFlipWeak(pOtherSensor, pMySensor);
163 } else {
164 MR::sendMsgPush(pOtherSensor, pMySensor);
165 }
166 }
167 }
168 else {
169 MR::sendMsgPush(pOtherSensor, pMySensor);
170 }
171 }
172 else {
173 if (isEnableEnemyAttack()) {
174 hit = MR::sendMsgToEnemyAttackBlow(pOtherSensor, pMySensor);
175 }
176 if (!hit) {
177 MR::sendMsgPush(pOtherSensor, pMySensor);
178 }
179 }
180 if (hit) {
181 MR::emitEffectHitBetweenSensors(this, pMySensor, pOtherSensor, 0.0f, "Hit");
182 MR::calcSensorDirectionNormalize(&stack_30, pOtherSensor, pMySensor);
183 f32 dot = mGroundChecker->mVelocity.dot(stack_30) * 1.6f;
184 TVec3f stack_C(stack_30);
185 stack_C.scale(dot);
186 TVec3f *groundvel = &mGroundChecker->mVelocity;
187 PSVECSubtract(groundvel->toCVec(), stack_C.toVec(), groundvel->toVec());
188 mGroundChecker->mVelocity.scaleInline(0.3f);
189 setNerve(&NrvPunchingKinoko::PunchingKinokoNrvWait::sInstance);
190 }
191 }
192 }
193}
194
195bool PunchingKinoko::receiveMsgPlayerAttack(u32 a1, HitSensor *pOtherSensor, HitSensor *pMySensor) {
196 if (isCrushed()) {
197 return false;
198 }
199
200 if (pMySensor == getSensor("Body")) {
201 return false;
202 }
203
204 if (MR::isMsgInvincibleAttack(a1)) {
205 if (mInvincibleHitCoolDown < 0) {
206 MR::startBlowHitSound(this);
207 mInvincibleHitCoolDown = 10;
208 }
209 return requestEnemyBlow(pOtherSensor, pMySensor);
210 }
211
212 if (MR::isMsgPlayerHipDrop(a1)) {
213 return requestCrush();
214 }
215
216 if (MR::isMsgLockOnStarPieceShoot(a1)) {
217 return true;
218 }
219
220 if (MR::isMsgStarPieceAttack(a1)) {
221 TVec3f stack_14;
222 MR::calcSensorDirectionNormalize(&stack_14, pOtherSensor, pMySensor);
223 f32 dot = mGroundChecker->mVelocity.dot(stack_14);
224 if (dot < 15.0f) {
225 TVec3f stack_8(stack_14);
226 stack_8.scale(15.0f);
227 mGroundChecker->mVelocity.add(stack_8);
228 }
229 MR::startSound(this, "SE_OJ_PNC_KINOKO_BOUND", -1, -1);
230 return true;
231 }
232
233 if (MR::isMsgPlayerSpinAttack(a1)) {
234 return requestPunch(pOtherSensor, pMySensor);
235 }
236
237 if (MR::isMsgPlayerTrample(a1)) {
238 return requestTrample(pOtherSensor, pMySensor);
239 }
240
241 return false;
242}
243
244bool PunchingKinoko::receiveMsgEnemyAttack(u32 a1, HitSensor *pOtherSensor, HitSensor *pMySensor) {
245 if (isCrushed()) {
246 return false;
247 }
248
249 if (pMySensor == getSensor("Body")) {
250 return false;
251 }
252
253 if (MR::isMsgToEnemyAttackTrample(a1)) {
254 return requestCrush();
255 }
256
257 if (MR::isMsgToEnemyAttackBlow(a1)) {
258 return requestEnemyBlow(pOtherSensor, pMySensor);
259 }
260
261 return false;
262}
263
264bool PunchingKinoko::receiveMsgPush(HitSensor *pOtherSensor, HitSensor *pMySensor) {
265 if (isCrushed()) {
266 return false;
267 }
268
269 if (pMySensor == getSensor("Body")) {
270 return false;
271 }
272
273 TVec3f stack_14;
274 MR::calcSensorHorizonNormalize(&stack_14, mGravity, pOtherSensor, pMySensor);
275 f32 fVar1 = stack_14.dot(mGroundChecker->mVelocity);
276 if (fVar1 < 0.0f) {
277 fVar1 = 3.0f;
278 }
279 else {
280 fVar1 = 3.0f - fVar1;
281 }
282
283 if (fVar1 > 0.0f) {
284 TVec3f stack_8(stack_14);
285 stack_8.scale(fVar1);
286 mGroundChecker->mVelocity.add(stack_8);
287 return true;
288 }
289
290 return false;
291}
292
293bool PunchingKinoko::requestPunch(HitSensor *pOtherSensor, HitSensor *pMySensor) {
294 if (isCrushed()) {
295 return false;
296 }
297
298 if (pMySensor == getSensor("Body")) {
299 return false;
300 }
301
302 if (isEnablePunched()) {
303 MR::invalidateClipping(this);
304 TVec3f stack_14;
305 MR::calcSensorHorizonNormalize(&stack_14, mGravity, pOtherSensor, pMySensor);
306 TVec3f stack_8(stack_14);
307 stack_8.scale(50.0f);
308 mGroundChecker->mVelocity.add(stack_8);
309 MR::startSpinHitSound(this);
310 MR::startBlowHitSound(this);
311 MR::tryRumblePadStrong(this, 0);
312 MR::stopScene(5);
313 setNerve(&NrvPunchingKinoko::PunchingKinokoNrvPunched::sInstance);
314
315 return true;
316 }
317
318 return false;
319}
320
321bool PunchingKinoko::requestEnemyBlow(HitSensor *pOtherSensor, HitSensor *pMySensor) {
322 if (!isEnableBlowed()) {
323 return false;
324 }
325
326 MR::invalidateClipping(this);
327 TVec3f stack_14;
328 MR::calcSensorHorizonNormalize(&stack_14, mGravity, pOtherSensor, pMySensor);
329 TVec3f stack_8(stack_14);
330 stack_8.scale(25.0f);
331 mGroundChecker->mVelocity.add(stack_8);
332 MR::startSound(this, "SE_OJ_PNC_KINOKO_HIT_SELF", -1, -1);
333 setNerve(&NrvPunchingKinoko::PunchingKinokoNrvWait::sInstance);
334
335 return true;
336}
337
338bool PunchingKinoko::requestTrample(HitSensor *pOtherSensor, HitSensor *pMySensor) {
339 if (isEnableTrample()) {
340 TVec3f stack_14;
341 MR::calcSensorDirectionNormalize(&stack_14, pOtherSensor, pMySensor);
342
343 TVec3f stack_8(stack_14);
344 stack_8.scale(5.0f);
345
346 mGroundChecker->mVelocity.add(stack_8);
347 return true;
348 }
349 return false;
350}
351
352bool PunchingKinoko::requestCrush() {
353 if (isEnableCrushed()) {
354 MR::invalidateClipping(this);
355 setNerve(&NrvPunchingKinoko::PunchingKinokoNrvCrushed::sInstance);
356 return true;
357 }
358 return false;
359}
360
361void PunchingKinoko::exeWait() {
362 if (MR::isFirstStep(this)) {
363 MR::startBrk(this, "Normal");
364 MR::validateClipping(this);
365 _B8 = true;
366 }
367
368 TVec3f stack_38;
369 TVec3f stack_2C;
370 MR::calcPositionUpOffset(&stack_38, this, 130.0f);
371
372 TVec3f *groundCheckerPos = &mGroundChecker->mPosition;
373 TVec3f stack_20;
374 TVec3f stack_14(stack_38);
375 PSVECSubtract(stack_14.toCVec(), groundCheckerPos->toCVec(), stack_14.toVec());
376
377 stack_20 = stack_14;
378 stack_20.scale(0.008f);
379 MR::addVelocity(mGroundChecker, stack_20);
380 MR::attenuateVelocity(mGroundChecker, 0.94f);
381
382 if (MR::isStarPointerPointing2POnPressButton(this, nullptr, false, false)) {
383 if (mStarPointerHitCoolDown == 0 && !_B8 && MR::getStarPointerScreenSpeed(1) > 5.0f) {
384 stack_2C.set(0.0f, 0.0f, 0.0f);
385 if (MR::calcStarPointerWorldVelocityDirectionOnPlane(&stack_2C, mGroundChecker->mPosition, mGravity, 1)) {
386 TVec3f stack_8(stack_2C);
387 stack_8.scale(35.0f);
388 mGroundChecker->mVelocity.add(stack_8);
389 MR::startBlowHitSound(this);
390 MR::start2PAttackAssistSound();
391 MR::tryRumblePadWeak(this, 1);
392 mStarPointerHitCoolDown = 30;
393 setNerve(&NrvPunchingKinoko::PunchingKinokoNrvPointSnaped::sInstance);
394 return;
395 }
396 }
397 _B8 = true;
398 }
399 else {
400 _B8 = false;
401 }
402 MR::vecBlend(_9C, mPosition, &_9C, 0.05f);
403}
404
405void PunchingKinoko::exeSwing() {
406 float var2 = MR::calcVelocityLength(mGroundChecker);
407 TVec3f stack_20;
408 MR::calcPositionUpOffset(&stack_20, this, 130.0f);
409
410 TVec3f *groundCheckerPos = &mGroundChecker->mPosition;
411 TVec3f stack_14(stack_20);
412 PSVECSubtract(stack_14.toCVec(), groundCheckerPos->toCVec(), stack_14.toVec());
413
414 TVec3f stack_8(stack_14);
415 stack_8.scale(0.008f);
416
417 MR::addVelocity(mGroundChecker, stack_8);
418 MR::attenuateVelocity(mGroundChecker, 0.97f);
419 float var3 = MR::calcVelocityLength(mGroundChecker);
420
421 const float f0 = 20.0f;
422 if (var2 < f0 && var3 >= f0) {
423 MR::startSound(this, "SE_OJ_PNC_KINOKO_BOUND", -1, -1);
424 }
425
426 MR::vecBlend(_9C, mPosition, &_9C, 0.05f);
427
428 if (var3 < 40.0f && PSVECMag(stack_14.toCVec()) < 50.0f) {
429 setNerve(&NrvPunchingKinoko::PunchingKinokoNrvWait::sInstance);
430 }
431}
432
433void PunchingKinoko::exePointSnaped() {
434 MR::startLevelSound(this, "SE_OJ_LV_PNC_KINOKO_PUNCHED", -1, -1, -1);
435 addVelocityKeepHeight();
436 MR::attenuateVelocity(mGroundChecker, 0.99f);
437 if (MR::isGreaterStep(this, 6)) {
438 setNerve(&NrvPunchingKinoko::PunchingKinokoNrvSwing::sInstance);
439 }
440}
441
442void PunchingKinoko::exePunched() {
443 MR::isFirstStep(this);
444 MR::startLevelSound(this, "SE_OJ_LV_PNC_KINOKO_PUNCHED", -1, -1, -1);
445 addVelocityKeepHeight();
446 MR::attenuateVelocity(mGroundChecker, 0.99f);
447 HitSensor *sensor = getSensor("Head");
448 MR::sendMsgEnemyAttackToBindedSensor(mGroundChecker, sensor);
449 _9C.set(mGroundChecker->mPosition);
450 if (MR::isGreaterStep(this, 5)) {
451 setNerve(&NrvPunchingKinoko::PunchingKinokoNrvPunchedBrake::sInstance);
452 }
453}
454
455void PunchingKinoko::exePunchedBrake() {
456 addVelocityKeepHeight();
457 MR::attenuateVelocity(mGroundChecker, 0.9f);
458 MR::startLevelSound(this, "SE_OJ_LV_PNC_KINOKO_PUNCHED", -1, -1, -1);
459 _9C.set(mGroundChecker->mPosition);
460 if (!MR::isGreaterStep(this, 40)) {
461 HitSensor *sensor = getSensor("Head");
462 if (!MR::sendMsgEnemyAttackToBindedSensor(mGroundChecker, sensor)) {
463 return;
464 }
465 }
466 MR::startSound(this, "SE_OJ_PNC_KINOKO_RETURN", -1, -1);
467 setNerve(&NrvPunchingKinoko::PunchingKinokoNrvSwing::sInstance);
468}
469
470void PunchingKinoko::exeHitted() {
471 if (MR::isFirstStep(this)) {
472 MR::startSound(this, "SE_OJ_PNC_KINOKO_HIT_SELF", -1, -1);
473 }
474 addVelocityKeepHeight();
475 MR::attenuateVelocity(mGroundChecker, 0.99f);
476 if (MR::isGreaterStep(this, 5)) {
477 setNerve(&NrvPunchingKinoko::PunchingKinokoNrvWait::sInstance);
478 }
479}
480
481void PunchingKinoko::exeCrushed() {
482 if (MR::isFirstStep(this)) {
483 MR::startBrk(this, "Press");
484 if (MR::isShadowProjected(this, "頭")) {
485 MR::getShadowProjectionNormal(this, "頭", &_A8);
486 MR::getShadowProjectionPos(this, "頭", &mGroundChecker->mPosition);
487 TVec3f stack_8(_A8);
488 stack_8.scale(20.0f);
489 mGroundChecker->mPosition.add(stack_8);
490 }
491 else {
492 _A8.set(mGravity);
493 }
494 MR::offBind(mGroundChecker);
495 mScaleController->startCrush();
496 MR::startSound(this, "SE_OJ_PNC_KINOKO_CRASH", -1, -1);
497 }
498 MR::zeroVelocity(mGroundChecker);
499 if (MR::isGreaterStep(this, 180)) {
500 setNerve(&NrvPunchingKinoko::PunchingKinokoNrvCrushedEnd::sInstance);
501 }
502}
503
504void PunchingKinoko::exeCrushedEnd() {
505 MR::isFirstStep(this);
506 if (MR::isStep(this, 10)) {
507 MR::startBrk(this, "Revival");
508 mScaleController->startAnim();
509 MR::startSound(this, "SE_OJ_PNC_KINOKO_RECOVER", -1, -1);
510 }
511 TVec3f stack_20;
512 MR::calcPositionUpOffset(&stack_20, this, 130.0f);
513 TVec3f *groundCheckerPos = &mGroundChecker->mPosition;
514 TVec3f stack_14;
515 TVec3f stack_8(stack_20);
516 PSVECSubtract(stack_8.toCVec(), groundCheckerPos->toCVec(), stack_8.toVec());
517 stack_14 = stack_8;
518 stack_14.scale(0.008f);
519 MR::addVelocity(mGroundChecker, stack_14);
520 MR::attenuateVelocity(mGroundChecker, 0.94f);
521 if (MR::isGreaterStep(this, 60)) {
522 setNerve(&NrvPunchingKinoko::PunchingKinokoNrvWait::sInstance);
523 MR::onBind(mGroundChecker);
524 }
525}
526
527void PunchingKinoko::addVelocityKeepHeight() {
528 if (MR::isShadowProjected(this, "頭")) {
529 TVec3f stack_8;
530 MR::getShadowProjectionPos(this, "頭", &stack_8);
531 MR::addVelocityKeepHeight(mGroundChecker, stack_8, 130.0f, 0.5f, 60.0f);
532 }
533}
534
535bool PunchingKinoko::isEnablePunched() const {
536 if (isNerve(&NrvPunchingKinoko::PunchingKinokoNrvWait::sInstance) ||
537 isNerve(&NrvPunchingKinoko::PunchingKinokoNrvSwing::sInstance)) {
538 return true;
539 }
540 return false;
541}
542
543bool PunchingKinoko::isEnableHitPlayer() const {
544 return isNerve(&NrvPunchingKinoko::PunchingKinokoNrvSwing::sInstance);
545}
546
547bool PunchingKinoko::isEnableEnemyAttack() const {
548 if (isNerve(&NrvPunchingKinoko::PunchingKinokoNrvSwing::sInstance) ||
549 isNerve(&NrvPunchingKinoko::PunchingKinokoNrvPunched::sInstance) ||
550 isNerve(&NrvPunchingKinoko::PunchingKinokoNrvPunchedBrake::sInstance) ||
551 isNerve(&NrvPunchingKinoko::PunchingKinokoNrvPointSnaped::sInstance)) {
552 return true;
553 }
554 return false;
555}
556
557bool PunchingKinoko::isEnableCrushed() const {
558 if (isNerve(&NrvPunchingKinoko::PunchingKinokoNrvWait::sInstance) ||
559 isNerve(&NrvPunchingKinoko::PunchingKinokoNrvCrushedEnd::sInstance)) {
560 return true;
561 }
562 return false;
563}
564
565bool PunchingKinoko::isEnableTrample() const {
566 if (isNerve(&NrvPunchingKinoko::PunchingKinokoNrvCrushed::sInstance) ||
567 isNerve(&NrvPunchingKinoko::PunchingKinokoNrvCrushedEnd::sInstance)) {
568 return false;
569 }
570 return true;
571}
572
573bool PunchingKinoko::isEnableBlowed() const {
574 return isNerve(&NrvPunchingKinoko::PunchingKinokoNrvWait::sInstance);
575}
576
577bool PunchingKinoko::isCrushed() const {
578 return isNerve(&NrvPunchingKinoko::PunchingKinokoNrvCrushed::sInstance);
579}
580
581namespace NrvPunchingKinoko {
582 INIT_NERVE(PunchingKinokoNrvWait);
583 INIT_NERVE(PunchingKinokoNrvSwing);
584 INIT_NERVE(PunchingKinokoNrvPunched);
585 INIT_NERVE(PunchingKinokoNrvPunchedBrake);
586 INIT_NERVE(PunchingKinokoNrvHitted);
587 INIT_NERVE(PunchingKinokoNrvPointSnaped);
588 INIT_NERVE(PunchingKinokoNrvCrushed);
589 INIT_NERVE(PunchingKinokoNrvCrushedEnd);
590
591 void PunchingKinokoNrvWait::execute(Spine *pSpine) const {
592 PunchingKinoko* kinoko = reinterpret_cast<PunchingKinoko*>(pSpine->mExecutor);
593 kinoko->exeWait();
594 };
595 void PunchingKinokoNrvSwing::execute(Spine *pSpine) const {
596 PunchingKinoko* kinoko = reinterpret_cast<PunchingKinoko*>(pSpine->mExecutor);
597 kinoko->exeSwing();
598 };
599 void PunchingKinokoNrvPunched::execute(Spine *pSpine) const {
600 PunchingKinoko* kinoko = reinterpret_cast<PunchingKinoko*>(pSpine->mExecutor);
601 kinoko->exePunched();
602 };
603 void PunchingKinokoNrvPunchedBrake::execute(Spine *pSpine) const {
604 PunchingKinoko* kinoko = reinterpret_cast<PunchingKinoko*>(pSpine->mExecutor);
605 kinoko->exePunchedBrake();
606 };
607 void PunchingKinokoNrvHitted::execute(Spine *pSpine) const {
608 PunchingKinoko* kinoko = reinterpret_cast<PunchingKinoko*>(pSpine->mExecutor);
609 kinoko->exeHitted();
610 };
611 void PunchingKinokoNrvPointSnaped::execute(Spine *pSpine) const {
612 PunchingKinoko* kinoko = reinterpret_cast<PunchingKinoko*>(pSpine->mExecutor);
613 kinoko->exePointSnaped();
614 };
615 void PunchingKinokoNrvCrushed::execute(Spine *pSpine) const {
616 PunchingKinoko* kinoko = reinterpret_cast<PunchingKinoko*>(pSpine->mExecutor);
617 kinoko->exeCrushed();
618 };
619 void PunchingKinokoNrvCrushedEnd::execute(Spine *pSpine) const {
620 PunchingKinoko* kinoko = reinterpret_cast<PunchingKinoko*>(pSpine->mExecutor);
621 kinoko->exeCrushedEnd();
622 };
623};
624
625PunchingKinoko::~PunchingKinoko() {
626
627}
The basis of a drawable actor that can contain states (see: Nerve)
Definition LiveActor.hpp:24
TVec3f mPosition
3D vector of the actor's position.
Definition LiveActor.hpp:95
TVec3f mVelocity
3D vector of the actor's velocity.
Definition LiveActor.hpp:98
TVec3f mGravity
3D vector of the actor's gravity.
Definition LiveActor.hpp:99
HitSensor * getSensor(const char *pSensorName) const
Gets a sensor.
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
virtual void calcAndSetBaseMtx()
Calculates and sets the base matrix of the actor.
Definition Spine.hpp:9