SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
IceStep.cpp
1#include "Game/MapObj/IceStep.hpp"
2
3IceStep::IceStep(const char *pName) : LiveActor(pName) {
4
5}
6
7IceStep::~IceStep() {
8
9}
10
11void IceStep::init(const JMapInfoIter &rIter) {
12 MR::initDefaultPos(this, rIter);
13 initModelManagerWithAnm("IceStep", nullptr, false);
14 MR::connectToSceneMapObjStrongLight(this);
15 initSound(4, false);
16 initEffectKeeper(1, nullptr, false);
17 f32 scale = 90.0f * mScale.x;
18 initHitSensor(1);
19 TVec3f offs;
20 offs.y = scale;
21 offs.x = 0.0f;
22 offs.z = 0.0f;
23 MR::addHitSensorMapObj(this, "body", 8, scale, offs);
24 PSMTXIdentity(_8C);
25 MR::initCollisionParts(this, "IceStep", getSensor("body"), nullptr);
26 MR::validateClipping(this);
27 initNerve(&NrvIceStep::IceStepNrvWait::sInstance);
28 kill();
29 mTimer = 0;
30}
31
32void IceStep::exeWait() {
33 if (mTimer != 0) {
34 mTimer--;
35 }
36
37 switch (mTimer) {
38 case 0x12C:
39 MR::startBpk(this, "TimeOutLong");
40 break;
41 case 0x78:
42 MR::startBpk(this, "TimeOutShort");
43 break;
44 case 1:
45 destroy();
46 break;
47 case 0:
48 if (MR::isBckStopped(this)) {
49 kill();
50 }
51 break;
52 }
53}
54
55/* matching except for assembly floats not being correct but whatever*/
56void IceStep::setOn(u32 stepIdx, const TVec3f &rPosition, const TVec3f &rRotation) {
57 mPosition = rPosition;
58 mRotation = rRotation;
59 MR::offUpdateCollisionParts(this);
60 MR::onUpdateCollisionPartsOnetimeImmediately(this);
61 s32 v8 = stepIdx >> 1;
62
63 if (stepIdx & 1) {
64 v8 -= 10;
65 }
66
67 TVec3f upVec;
68 MR::calcUpVec(&upVec, this);
69 TVec3f multVec(MR::multVecNoCtor(MR::multVecNoCtor(upVec, v8), 0.2f));
70 mPosition = MR::addVec(multVec, rPosition);
71
72 MR::startBck(this, "Start", nullptr);
73 MR::startBpk(this, "Start");
74 MR::startSound(this, "SE_OJ_ICE_FLOOR_FREEZE", -1, -1);
75 mTimer = 0x4B0;
76 MR::invalidateClipping(this);
77 MR::resetPosition(this);
78 setNerve(&NrvIceStep::IceStepNrvWait::sInstance);
79 MR::validateCollisionParts(this);
80 MR::showModel(this);
81 appear();
82}
83
84void IceStep::destroy() {
85 MR::startBck(this, "End", nullptr);
86 MR::startBpk(this, "End");
87 MR::startSound(this, "SE_OJ_ICE_FLOOR_MELT", -1, -1);
88 mTimer = 0;
89}
90
91void IceStep::doHit() {
92 MR::invalidateCollisionParts(this);
93 setNerve(&NrvIceStep::IceStepNrvHit::sInstance);
94 MR::emitEffect(this, "Break");
95 MR::startSound(this, "SE_OJ_ICE_FLOOR_BREAK", -1, -1);
96 MR::startBck(this, "End", nullptr);
97 mTimer = 0;
98}
99
100bool IceStep::receiveMsgPlayerAttack(u32 , HitSensor *, HitSensor *) {
101 return false;
102}
103
104bool IceStep::receiveMsgEnemyAttack(u32 msg, HitSensor *, HitSensor *) {
105 if (MR::isOnPlayer(this)) {
106 return false;
107 }
108
109 if (isNerve(&NrvIceStep::IceStepNrvWait::sInstance)) {
110 doHit();
111 return true;
112 }
113
114 return false;
115}
116
117void IceStep::control() {
118
119}
120
121namespace NrvIceStep {
122 INIT_NERVE(IceStepNrvHit);
123 INIT_NERVE(IceStepNrvWait);
124};
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
Definition IceStep.cpp:11
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 mScale
3D vector of the actor's scale.
Definition LiveActor.hpp:97
HitSensor * getSensor(const char *pSensorName) const
Gets a sensor.