SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
MagicBell.cpp
1#include "Game/MapObj/MagicBell.hpp"
2
3MagicBell::MagicBell(const char *pName) : LiveActor(pName) {
4 _8C = nullptr;
5 mSurface1Mtx = nullptr;
6 mSurface2Mtx = nullptr;
7 _94 = nullptr;
8 mSurface1Mtx = nullptr;
9 _9C.x = 0.0f;
10 _9C.y = 0.0f;
11 _9C.z = 0.0f;
12}
13
14void MagicBell::init(const JMapInfoIter &rIter) {
15 MR::initDefaultPos(this, rIter);
16 initModelManagerWithAnm("Bell", nullptr, false);
17 mSurface2Mtx = MR::getJointMtx(this, "polySurface2");
18 mSurface1Mtx = MR::getJointMtx(this, "polySurface1");
19 MR::connectToSceneMapObjNoCalcAnim(this);
20 initHitSensor(1);
21 MR::addHitSensorMapObj(this, "body", 8, 60.0f, TVec3f(0.0f, -80.0f, 0.0f));
22 initEffectKeeper(1, nullptr, false);
23 MR::addEffect(this, "StarWandHitMark");
24 MR::setEffectHostSRT(this, "StarWandHitMark", &_9C, nullptr, nullptr);
25 initSound(4, false);
26 initNerve(&NrvMagicBell::MagicBellNrvWait::sInstance);
27 MR::initShadowVolumeSphere(this, 100.0f);
28 MR::useStageSwitchWriteA(this, rIter);
29 MR::initStarPointerTarget(this, 100.0f, TVec3f(0.0f, -80.0f, 0.0f));
30 TMtx34f mtx;
31 mtx.identity();
32 MR::makeMtxTR(mtx.toMtxPtr(), this);
33 MR::calcGravity(this);
34 _8C = new Swinger(&mPosition, mtx.toMtxPtr(), 100.0f, 0.60000002f, 0.99000001f, &mGravity);
35 _94 = new Swinger(&mPosition, mtx.toMtxPtr(), 50.0f, 0.30000001f, 0.94999999f, &mGravity);
36 makeActorAppeared();
37}
38
39void MagicBell::exeWait() {
40 MR::isFirstStep(this);
41
42 if (!tryRing()) {
43 PSMTXCopy(_8C->_60.toMtxPtr(), mSurface2Mtx);
44 PSMTXCopy(_94->_60.toMtxPtr(), mSurface1Mtx);
45 TVec3f v3(0.0f, 0.0f, 0.0f);
46 MR::setMtxTrans(mSurface2Mtx, v3.x, v3.y, v3.z);
47 TVec3f v2(0.0f, 0.0f, 0.0f);
48 MR::setMtxTrans(mSurface1Mtx, v2.x, v2.y, v2.z);
49 PSMTXScaleApply(mSurface2Mtx, mSurface2Mtx, mScale.x, mScale.y, mScale.z);
50 PSMTXScaleApply(mSurface1Mtx, mSurface1Mtx, mScale.x, mScale.y, mScale.z);
51 MR::setMtxTrans(mSurface2Mtx, mPosition.x, mPosition.y, mPosition.z);
52 MR::setMtxTrans(mSurface1Mtx, mPosition.x, mPosition.y, mPosition.z);
53 }
54}
55
56/*
57void MagicBell::exeRing() {
58 if (MR::isFirstStep(this)) {
59 if (MR::isValidSwitchA(this) && !MR::isOnSwitchA(this)) {
60 MR::onSwitchA(this);
61 MR::startSound(this, "SE_OJ_HAPPY_BELL_SWITCH_ON", -1, -1);
62 }
63
64 MR::startSound(this, "SE_OJ_HAPPY_BELL_RING", -1, -1);
65 }
66
67 _8C->update();
68 _94->update();
69
70 if (_8C->_20.dot(_94->_20) < 0.94999999f) {
71 TVec3f v17(_8C->_20);
72 v17 = v17 - _94->_20;
73 f32 dot = _94->_20.dot(v17);
74 v17.x = v17.x - (dot * _94->_20.x);
75 v17.y = v17.y - (dot * _94->_20.y);
76 v17.z = v17.z - (dot * _94->_20.z);
77 MR::normalizeOrZero(&v17);
78
79 }
80}
81*/
82
83void MagicBell::attackSensor(HitSensor *a1, HitSensor *a2) {
84 if (MR::isSensorPlayer(a2)) {
85 MR::sendMsgPush(a2, a1);
86 }
87}
88
89// MagicBell::receiveMsgPlayerAttack
90// MagicBell::tryRing
91// MagicBell::startRing
92
93MagicBell::~MagicBell() {
94
95}
96
97namespace NrvMagicBell {
98 INIT_NERVE(MagicBellNrvWait);
99 INIT_NERVE(MagicBellNrvRing);
100};
101
102MtxPtr MagicBell::getBaseMtx() const {
103 return mSurface2Mtx;
104}
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 mScale
3D vector of the actor's scale.
Definition LiveActor.hpp:97
TVec3f mGravity
3D vector of the actor's gravity.
Definition LiveActor.hpp:99
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
Definition MagicBell.cpp:14
virtual MtxPtr getBaseMtx() const
Gets the base matrix of the model used for the actor.