SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
BenefitItemObj.cpp
1#include "Game/MapObj/BenefitItemObj.hpp"
2#include "JSystem/JGeometry/TUtil.hpp"
3
4s16 def = 600;
5static f32 zero = 0.0f;
6
7namespace NrvBenefitItemObj {
8 INIT_NERVE(HostTypeNrvWait);
9 INIT_NERVE(HostTypeNrvShoot);
10 INIT_NERVE(HostTypeNrvCatch);
11 INIT_NERVE(HostTypeNrvAppearGround);
12 INIT_NERVE(HostTypeNrvPreEscape);
13 INIT_NERVE(HostTypeNrvEscape);
14};
15
16namespace {
17 const f32 cAppearThrowFwdSpd = 5.0f;
18 const f32 cBoundUpSpd = 20.0f;
19 const f32 cAppearThrowUpSpd = 10.0f;
20 const f32 cAppearThrowUpSpd2 = 15.0f;
21 const f32 cGravity = 0.5f;
22 const f32 cReflectWallX = 0.30000001f;
23 static f32 cSpdRotateY = JGeometry::TUtil<f32>::PI() / 60.0f;
24};
25
26void ShadowClipActor::endClipped() {
27 LiveActor::endClipped();
28 if (MR::isClipped(_8C)) {
29 _8C->endClipped();
30 }
31}
32
33void ShadowClipActor::control() {
34 if (!MR::isClipped(this)) {
35 _8C->endClipped();
36 }
37}
38
39BenefitItemObj::BenefitItemObj(const char *pName, const char *pPowerUp) : LiveActor(pName) {
40 _138 = 0;
41 _D8 = 0;
42 _E2 = 0;
43 _E5 = 0;
44 _E6 = 0;
45 _E4 = 0;
46 _12C = 0;
47 _EC = 0.0f;
48 mFollowMtx = nullptr;
49 _DD = 0;
50 _DE = 0;
51 mCameraInfo = nullptr;
52 mHitSensorActor = nullptr;
53 _130 = 0;
54 _BC.zero();
55 _C8.zero();
56 _120 = pPowerUp;
57 PSMTXIdentity(_F0);
58}
59
60void BenefitItemObj::initModelAndEfx() {
61 initModelManagerWithAnm(_120, nullptr, false);
62 initEffectKeeper(5, _120, false);
63 initBinder(50.0f, 50.0f, 0);
64 initHitSensor(1);
65 MR::addHitSensor(this, "body", 77, 4, 50.0f, TVec3f(0.0f, 50.0f, 0.0f));
66}
67
69 LiveActor::init(rIter);
70 if (MR::isValidInfo(rIter)) {
71 MR::initDefaultPos(this, rIter);
72 }
73
74 initModelAndEfx();
75 MR::connectToSceneItemStrongLight(this);
76 MR::offCalcGravity(this);
77 MR::calcUpVec(&mGravity, this);
79 initSound(4, false);
80 mFlashCtrl = new FlashingCtrl(this, true);
81 MR::offBind(this);
82 _E3 = 0;
83
84 if (MR::isValidInfo(rIter)) {
85 _E3 = MR::isConnectedWithRail(rIter);
86 if (_E3) {
87 initRailRider(rIter);
88 }
89 _E8 = 5.0f;
90 s32 railArg;
91 if (_E3 && MR::getJMapInfoRailArg0NoInit(this, &railArg)) {
92 _E8 = railArg / 10.0f;
93 }
94 }
95
96 MR::setClippingFar100m(this);
97 MR::setClippingTypeSphere(this, 100.0f);
98 initNerve(&NrvBenefitItemObj::HostTypeNrvWait::sInstance);
99 _DF = 1;
100 _D9 = 0;
101 _DA = 0;
102 _E1 = 0;
103 s32 arg0 = -1;
104 s32 arg1 = -1;
105 s32 arg2 = -1;
106 s32 arg3 = -1;
107 s32 arg4 = -1;
108 s32 arg5 = -1;
109 s32 arg6 = -1;
110 s32 arg7 = -1;
111
112 if (MR::isValidInfo(rIter)) {
113 MR::getJMapInfoArg0NoInit(rIter, &arg0);
114 MR::getJMapInfoArg1NoInit(rIter, &arg1);
115 MR::getJMapInfoArg2NoInit(rIter, &arg2);
116 MR::getJMapInfoArg3NoInit(rIter, &arg3);
117 MR::getJMapInfoArg4NoInit(rIter, &arg4);
118 MR::getJMapInfoArg5NoInit(rIter, &arg5);
119 MR::getJMapInfoArg6NoInit(rIter, &arg6);
120 MR::getJMapInfoArg7NoInit(rIter, &arg7);
121 }
122 else {
123 _E1 = 1;
124 _DF = 0;
125 _DA = 0;
126 _D9 = 0;
127 }
128
129 switch(arg0) {
130 case -1:
131 case 0:
132 _DF = 0;
133 break;
134 }
135
136 switch(arg1 & 0xF) {
137 case 1:
138 _D9 = 1;
139 break;
140 case 2:
141 _D9 = 2;
142 break;
143 case 3:
144 _D9 = 3;
145 break;
146 }
147
148 if (arg1 != -1 && (arg1 & 0x80) != 0) {
149 _DE = 1;
150 }
151
152 switch (arg2) {
153 case 1:
154 _DA = 1;
155 break;
156 case 2:
157 _DA = 2;
158 break;
159 case 3:
160 _DA = 3;
161 break;
162 }
163
164 bool setClipType = false;
165 if (arg3 == 1) {
166 setClipType = true;
167 }
168
169 _DC = 0;
170
171 switch(arg4) {
172 case -1:
173 _DC = 1;
174 break;
175 case 1:
176 _DC = 2;
177 break;
178 case 2:
179 _DC = 3;
180 break;
181 case 3:
182 _DC = 4;
183 break;
184 }
185
186 if (arg5 == 1 && MR::isValidInfo(rIter)) {
187 MR::initActorCamera(this, rIter, &mCameraInfo);
188 _E4 = 1;
189 }
190
191 if (arg6 == -1) {
192 arg6 = 0;
193 }
194
195 _DB = arg6;
196 f32 shadowDist = 2000.0f;
197 if (arg7 != -1) {
198 shadowDist = arg7;
199 }
200
201 if (!_D8) {
202 if (MR::isValidInfo(rIter)) {
203 MR::useStageSwitchWriteDead(this, rIter);
204
205 if (MR::useStageSwitchReadAppear(this, rIter)) {
206 MR::FunctorV0M<BenefitItemObj *, void (BenefitItemObj::*)()> appearFunc = MR::Functor<BenefitItemObj>(this, &BenefitItemObj::appear);
207 MR::listenStageSwitchOnAppear(this, appearFunc);
208 _E1 = 1;
209 }
210 }
211 }
212
213 if (_D8) {
214 _DF = 0;
215 makeActorDead();
216 }
217 else {
218 if (_DF) {
219 makeActorAppeared();
220 if (_E1) {
221 MR::invalidateHitSensors(this);
222 }
223 else {
224 runEfx("Glow");
225 }
226 }
227 else if (_E1) {
228 makeActorDead();
229 }
230 else {
231 makeActorAppeared();
232 runEfx("Glow");
233 }
234
235 if (!MR::isDead(this) && MR::isValidInfo(rIter)) {
236 MR::useStageSwitchSleep(this, rIter);
237 }
238
239 TVec3f rotate_axis_y;
240 MR::getRotatedAxisY(&rotate_axis_y, mRotation);
241 _A4.set<f32>(rotate_axis_y);
242
243 if (_DC) {
244 MR::initShadowVolumeCylinder(this, 50.0f);
245 MR::setShadowDropLength(this, nullptr, shadowDist);
246
247 if (arg7 == -1) {
248 MR::onShadowVolumeCutDropLength(this, nullptr);
249 MR::setShadowVolumeEndDropOffset(this, nullptr, 50.0f);
250 }
251
252 if ((_DC & 0x1) != 0) {
253 if ((_DC & 0x2) != 0) {
254 MR::onCalcShadowDropPrivateGravity(this, nullptr);
255 MR::onCalcShadow(this, nullptr);
256 }
257 else {
258 MR::onCalcShadowDropPrivateGravityOneTime(this, nullptr);
259 MR::onCalcShadowOneTime(this, nullptr);
260 }
261 }
262 else if ((_DC & 0x2) != 0) {
263 MR::onCalcShadow(this, nullptr);
264 }
265 else {
266 MR::onCalcShadowOneTime(this, nullptr);
267 }
268
269 if (setClipType) {
270 MR::setClippingTypeSphere(this, shadowDist);
271 }
272 }
273 }
274}
275
276void BenefitItemObj::initAfterPlacement() {
277 if (_E3) {
278 MR::moveCoordAndTransToNearestRailPos(this);
279 }
280}
281
282void BenefitItemObj::makeActorAppeared() {
283 LiveActor::makeActorAppeared();
284 runEfx("Glow");
285}
286
287void BenefitItemObj::appear() {
288 LiveActor::appear();
289 _E1 = 0;
290 _DF = 1;
291
292 switch(_D9) {
293 case 0:
294 if (_DA) {
295 setNerve(&NrvBenefitItemObj::HostTypeNrvPreEscape::sInstance);
296 }
297 MR::validateHitSensors(this);
298 break;
299 case 1:
300 appearGround();
301 break;
302 case 2:
303 appearThrowUp();
304 break;
305 case 3:
306 appearThrowUpQuestionBox();
307 break;
308 }
309
311 PSMTXCopy(getBaseMtx(), _F0);
312
313 if (_E4) {
314 _E6 = 1;
315 MR::invalidateClipping(this);
316 }
317
318 if (_DA) {
319 MR::invalidateClipping(this);
320 }
321
322 if (_DE) {
323 MR::emitEffect(this, "AppearPicture");
324 }
325}
326
327void BenefitItemObj::appearGround() {
328 MR::startSystemSE("SE_SY_ITEM_APPEAR", -1, -1);
329 setNerve(&NrvBenefitItemObj::HostTypeNrvAppearGround::sInstance);
330 MR::hideModel(this);
331 MR::invalidateClipping(this);
332}
333
334void BenefitItemObj::appearThrowUp() {
335 MR::startSystemSE("SE_SY_ITEM_APPEAR", -1, -1);
336 runBck("Appear");
337 TVec3f rotated_axis;
338 MR::getRotatedAxisY(&rotated_axis, mRotation);
339 _A4.set<f32>(rotated_axis);
340 setNerve(&NrvBenefitItemObj::HostTypeNrvShoot::sInstance);
341
342 if (!_DD) {
343 f32 speed = cAppearThrowUpSpd;
344 mVelocity = MR::createVecAndScale(rotated_axis, speed);
345 }
346 else {
347 f32 speed = cAppearThrowUpSpd2;
348 mVelocity = MR::createVecAndScale(rotated_axis, speed);
349 }
350
351 MR::invalidateClipping(this);
352}
353
354void BenefitItemObj::shoot(const TVec3f &a2, const TVec3f &a3, bool a4) {
355 mPosition = a2;
356
357 if (_D9) {
358 _D9 = 2;
359 }
360 else {
361 _D9 = 3;
362 }
363
364 appear();
365}
366
367void BenefitItemObj::appearThrowUpQuestionBox() {
368 appearThrowUp();
369}
370
371void BenefitItemObj::control() {
372 if (_E6) {
373 if (MR::tryStartDemoWithoutCinemaFrame(this, "出現")) {
374 _E6 = 0;
375 MR::startActorCameraTargetSelf(this, mCameraInfo, -1);
376 MR::requestMovementOn(this);
377 MR::pauseOffCameraDirector();
378 _12C = MR::getActorCameraFrames(this, mCameraInfo);
379
380 if (_12C == 0) {
381 _12C = 120;
382 }
383 }
384 }
385
386 TVec3f v9(mGravity);
387 MR::calcGravityOrZero(this);
388 calcAndSetBaseMtxInMovement();
389
390 if (_E4) {
391 s32 v4 = _12C;
392 if (v4) {
393 s32 v5 = v4 - 1;
394 _12C = v5;
395 if (!v5) {
396 _E4 = 0;
397 MR::endActorCamera(this, mCameraInfo, false, -1);
398 MR::endDemo(this, "出現");
399 MR::validateClipping(this);
400 }
401 }
402 }
403
404 if (!_E2) {
405 if (MR::isBindedGroundDamageFire(this)) {
406 runEfx("Vanish");
407 kill();
408 }
409
410 if (!MR::isNearZero(mVelocity, 0.001f)) {
411 if (MR::isInDeath(this, TVec3f(0.0f, 0.0f, 0.0f))) {
412 runEfx("Vanish");
413 kill();
414 }
415 }
416 }
417}
418
419#ifdef NON_MATCHING
420// close but small diff
421void BenefitItemObj::exeWait() {
422 if (_DF && !_E1) {
423 if (_DB && !_E1) {
424 doRotateY();
425 return;
426 }
427
428 if (_DB & 0x2) {
429 doRotateY();
430 return;
431 }
432
433 if (!(_DB & 0x1)) {
434 return;
435 }
436
437 doRotateY();
438 return;
439 }
440}
441#endif
442
443
444void BenefitItemObj::doRotateY() {
445 if (isNerve(&NrvBenefitItemObj::HostTypeNrvAppearGround::sInstance)) {
446 _EC = 0.0f;
447 }
448 else {
449 _EC = (f32)fmod((6.2831855f + ((_EC + cSpdRotateY) - zero)), 6.283185482025146) + zero;
450 }
451}
452
453void BenefitItemObj::exeShoot() {
454 f32 reflect, v2, gravity, v4;
455
456 if (MR::isFirstStep(this)) {
457 MR::onBind(this);
458 }
459
460 TVec3f v9(mVelocity);
461 v2 = MR::vecKillElement(v9, mGravity, &v9);
462 if (MR::isBindedGround(this)) {
463 runBck("Land");
464 MR::validateHitSensors(this);
465 mVelocity.zero();
466 if (!_DA) {
467 if (MR::isGreaterStep(this, 10)) {
468 setNerve(&NrvBenefitItemObj::HostTypeNrvWait::sInstance);
469 }
470 }
471 else
472 setNerve(&NrvBenefitItemObj::HostTypeNrvEscape::sInstance);
473 }
474 else {
475 gravity = v2;
476 gravity += cGravity;
477 if (getNerveStep() == 60) {
478 MR::validateHitSensors(this);
479 }
480
481 if (MR::isBindedWall(this)) {
482 v4 = MR::vecKillElement(v9, *MR::getWallNormal(this), &v9);
483 reflect = cReflectWallX;
484 v9 -= MR::createVecAndScale(MR::createVecAndScale(*MR::getWallNormal(this), v4), reflect);
485 }
486
487 v9 += MR::createVecAndScale(mGravity, gravity);
488 mVelocity.set(v9);
489 }
490}
491
492void BenefitItemObj::exeCatch() {
493 if (MR::isFirstStep(this)) {
494 runEfx("Get");
495 MR::requestOneUp();
496 MR::hideModel(this);
497 MR::incPlayerLeft();
498 MR::explainOneUpIfAtFirst();
499 kill();
500 }
501
502 mVelocity.x = 0.0f;
503 mVelocity.y = 0.0f;
504 mVelocity.z = 0.0f;
505 mPosition.set(mHitSensorActor->mPosition);
506}
507
508bool BenefitItemObj::receiveMsgPlayerAttack(u32 msg, HitSensor *, HitSensor *) {
509 return MR::isMsgStarPieceReflect(msg);
510}
511
512bool BenefitItemObj::receiveOtherMsg(u32 msg, HitSensor *a2, HitSensor *a3) {
513 if (MR::isDead(this)) {
514 return false;
515 }
516
517 if (MR::receiveItemShowMsg(msg, a2, a3)) {
518 return true;
519 }
520
521 if (MR::receiveItemHideMsg(msg, a2, a3)) {
522 return true;
523 }
524
525 if (MR::isMsgItemStartMove(msg)) {
526 _E2 = 1;
527 return true;
528 }
529
530 if (MR::isMsgItemEndMove(msg)) {
531 _E2 = 0;
532 return true;
533 }
534
535 if (msg == 135) {
536 if (mHitSensorActor) {
537 return false;
538 }
539
540 if (isNerve(&NrvBenefitItemObj::HostTypeNrvWait::sInstance)
541 || isNerve(&NrvBenefitItemObj::HostTypeNrvShoot::sInstance)
542 || isNerve(&NrvBenefitItemObj::HostTypeNrvAppearGround::sInstance)
543 || isNerve(&NrvBenefitItemObj::HostTypeNrvEscape::sInstance)) {
544 mHitSensorActor = a2->mActor;
545 setNerve(&NrvBenefitItemObj::HostTypeNrvCatch::sInstance);
546 MR::tryRumblePadWeak(this, 0);
547 return true;
548 }
549 }
550
551 return false;
552}
553
554void BenefitItemObj::exeAppearGround() {
555 if (MR::isFirstStep(this)) {
556 MR::onBind(this);
557 }
558
559 if (getNerveStep() >= 60) {
560 if (getNerveStep() == 60) {
561 MR::showModel(this);
562 runBck("Appear");
563 MR::startSound(this, "SE_OJ_KINOKO_1UP_GROW", -1, -1);
564 }
565
566 if (MR::isBckStopped(this)) {
567 if (_DA) {
568 setNerve(&NrvBenefitItemObj::HostTypeNrvPreEscape::sInstance);
569 }
570 else {
571 setNerve(&NrvBenefitItemObj::HostTypeNrvWait::sInstance);
572 }
573
574 MR::validateHitSensors(this);
575 }
576 }
577}
578
579void BenefitItemObj::exePreEscape() {
580 if (getNerveStep() >= 30) {
581 setNerve(&NrvBenefitItemObj::HostTypeNrvEscape::sInstance);
582 }
583}
584
585void BenefitItemObj::initEscape() {
586 _B0 = def;
587 _B2 = 0;
588 _B4 = 0;
589 _B6 = 0;
590 _B8 = 0;
591 TVec3f axis_z;
592 MR::getRotatedAxisZ(&axis_z, mRotation);
593 TVec3f stack_8(axis_z);
594 stack_8.scale(7.0f);
595 _BC = stack_8;
596 MR::startSound(this, "SE_OJ_KINOKO_1UP_RUN_START", -1, -1);
597}
598
599void BenefitItemObj::doEscape() {
600 MR::startLevelSound(this, "SE_OJ_LV_KINOKO_1UP_RUN", -1, -1, -1);
601 bool cond = false;
602 if (_DA == 2) {
603 cond = true;
604 }
605
606 if (MR::isBindedGround(this)) {
607 f32 mag = PSVECMag(_BC.toCVec());
608 MR::vecKillElement(_BC, mGravity, &_BC);
609 _BC.setLength(mag);
610
611 if (cond) {
612 TVec3f* player_pos = MR::getPlayerPos();
613 TVec3f v22(mPosition);
614 v22 -= *player_pos;
615 MR::vecKillElement(v22, mGravity, &v22);
616 MR::normalizeOrZero(&v22);
617 if (_BC.dot(v22) < 0.0f) {
618 _BC += MR::createVecAndScale(v22, 0.2f);
619 _BC.x *= 1.1f;
620 _BC.y *= 1.1f;
621 _BC.z *= 1.1f;
622 }
623 else {
624 _BC += MR::createVecAndScale(v22, 0.0099999998f);
625 _BC.x *= 0.0099999998f;
626 _BC.y *= 0.0099999998f;
627 _BC.z *= 0.0099999998f;
628 }
629 }
630
631 if (PSVECMag(_BC.toCVec()) > 7.0f) {
632 _BC.setLength(7.0f);
633 }
634
635 if (_E5) {
636 _E5 = 0;
637 runBck("Land");
638 }
639
640 _C8 = MR::createVecAndScale(mGravity, 5.0f);
641 runEfx("Move");
642 }
643 else {
644 _E5 = 1;
645 _BC.x *= 0.94999999f;
646 _BC.y *= 0.94999999f;
647 _BC.z *= 0.94999999f;
648 _C8 += MR::createVecAndScale(mGravity, 1.0f);
649
650 if (PSVECMag(_C8.toCVec()) > 20.0f) {
651 _C8.setLength(20.0f);
652 }
653
654 stopEfx("Move");
655 }
656
657 if (MR::isBindedWall(this) && !_E5) {
658 if (MR::getWallNormal(this)->dot(mGravity) < 0.0f) {
659 f32 scalar = MR::vecKillElement(_BC, *MR::getWallNormal(this), &_BC);
660 _BC += -*MR::getWallNormal(this) % scalar;
661 _C8 += -mGravity % 20.0f;
662 _E5 = 1;
663 }
664 }
665}
666
667void BenefitItemObj::exeEscape() {
668 if (MR::isFirstStep(this)) {
669 MR::invalidateClipping(this);
670 MR::onBind(this);
671 initEscape();
672 }
673
674 doEscape();
675
676 if (_B0) {
677 MR::showModel(this);
678 s16 v1 = _B0;
679 _B0 = v1 - 1;
680 s16 v2 = _B8;
681
682 if (v2) {
683 _B8--;
684 MR::hideModel(this);
685 }
686
687 if (_B6) {
688 s16 v3 = _B6 - 1;
689 _B6--;
690
691 if ((s16)v3) {
692 _B6 = _B2;
693 _B8 = _B4;
694 }
695 }
696
697 if (_B0 == 0x3C) {
698 _B2 = 4;
699 _B4 = 2;
700 }
701 else if (_B0 == 0x78) {
702 _B2 = 8;
703 _B4 = 3;
704 }
705 else if (_B0 == 0xB4) {
706 _B2 = 12;
707 _B4 = 4;
708 _B6 = 12;
709 _B8 = 4;
710 }
711
712 if (!_B0) {
713 runEfx("Vanish");
714 makeActorDead();
715 }
716 }
717
718 if (_E3) {
719 MR::moveCoord(this, _E8);
720 TVec3f railPos(MR::getRailPos(this));
721 railPos -= mPosition;
722 _BC = railPos;
723 }
724
725 mVelocity = _BC;
726 mVelocity += _C8;
727
728 if ((_DB & 0x4) != 0) {
729 doRotateY();
730 }
731
732 if (_DC && (_DC & 0x2) == 0) {
733 if ((_DC & 0x1) != 0) {
734 MR::onCalcShadowOneTime(this, nullptr);
735 }
736 else {
737 MR::onCalcShadowDropPrivateGravityOneTime(this, nullptr);
738 }
739 }
740}
741
745
746void BenefitItemObj::calcAndSetBaseMtxInMovement() {
747 if (isNerve(&NrvBenefitItemObj::HostTypeNrvWait::sInstance)) {
749 PSMTXCopy(getBaseMtx(), _F0);
750 if (mFollowMtx) {
751 PSMTXCopy(mFollowMtx, _F0);
752 MR::extractMtxTrans(mFollowMtx, &mPosition);
753 }
754
755 MtxPtr mtx = MR::tmpMtxRotYRad(_EC);
756 PSMTXConcat(_F0, mtx, getBaseMtx());
757 }
758 else {
759 if (MR::isBindedGround(this)) {
760 _A4 = *MR::getGroundNormal(this);
761 }
762 else if (MR::isBindedWall(this)) {
763 _A4 = *MR::getWallNormal(this);
764 }
765
766 TVec3f stack_8(mVelocity);
767 MR::normalizeOrZero(&stack_8);
768 if (isNerve(&NrvBenefitItemObj::HostTypeNrvPreEscape::sInstance)) {
769 MR::vecBlendSphere(_98, stack_8, &stack_8, 0.1f);
770 _98 = stack_8;
771 }
772
773 if (!MR::isNearZero(stack_8, 0.001f)) {
774 if (MR::isSameDirection(_A4, stack_8, 0.0099999998f)) {
775 MR::setMtxTrans(getBaseMtx(), mPosition);
776 }
777 else {
778 TPos3f pos;
779 MR::makeMtxUpFrontPos(&pos, _A4, stack_8, mPosition);
780 MR::blendMtx(_F0, pos.toMtxPtr(), 0.2f, _F0);
781 MtxPtr mtx = MR::tmpMtxRotYRad(_EC);
782 PSMTXConcat(_F0, mtx, getBaseMtx());
783 MR::setMtxTrans(getBaseMtx(), mPosition);
784 }
785 }
786 }
787}
788
789void BenefitItemObj::setFollowMtx(MtxPtr mtx) {
790 mFollowMtx = mtx;
791 MR::extractMtxTrans(mtx, &mPosition);
792}
793
794void BenefitItemObj::runBck(const char *pBckName) {
795 MR::startBck(this, pBckName, nullptr);
796}
797
798void BenefitItemObj::runEfx(const char *pEfxName) {
799 MR::emitEffect(this, pEfxName);
800}
801
802void BenefitItemObj::stopEfx(const char *pEfxName) {
803 MR::deleteEffect(this, pEfxName);
804}
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.
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 mVelocity
3D vector of the actor's velocity.
Definition LiveActor.hpp:98
virtual void init(JMapInfoIter const &)
Intializes the NameObj and can set various settings and construct necessary classes.
Definition LiveActor.cpp:26
virtual void calcAndSetBaseMtx()
Calculates and sets the base matrix of the actor.
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.