SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
FirePressureBullet.cpp
1#include "Game/MapObj/FirePressureBullet.hpp"
2
3FirePressureBullet::FirePressureBullet(const char *pName) : LiveActor(pName) {
4 _8C.x = 0.0f;
5 _8C.y = 0.0f;
6 _8C.z = 0.0f;
7 mFirePressure = nullptr;
8 _9C = 0.0f;
9 _A0 = false;
10 _A1 = false;
11}
12
14 initModelManagerWithAnm("FireBullet", nullptr, false);
15 MR::connectToSceneMapObj(this);
16 initHitSensor(1);
17 TVec3f offs;
18 offs.x = 0.0f;
19 offs.y = 0.0f;
20 offs.z = 0.0f;
21 MR::addHitSensorEnemyAttack(this, "body", 8, 100.0f, offs);
22 initBinder(100.0f, 0.0f, 0);
23 MR::onCalcGravity(this);
24 initEffectKeeper(0, nullptr, false);
25 initSound(4, false);
26 MR::initShadowVolumeSphere(this, 75.0f);
27 initNerve(&NrvFirePressureBullet::FirePressureBulletNrvFly::sInstance);
28 makeActorDead();
29}
30
31void FirePressureBullet::kill() {
32 MR::startSound(this, "SE_OJ_F_PRESSURE_FIRE_BURST", -1, -1);
33 LiveActor::kill();
34}
35
37 TPos3f mtx;
38 MR::calcMtxFromGravityAndZAxis(&mtx, this,mGravity, _8C);
39 MR::setBaseTRMtx(this, mtx);
40}
41
42void FirePressureBullet::shotFireBullet(LiveActor *pActor, const TPos3f &rPos, const f32 &a3, bool a4, bool a5) {
43 f32 v7 = rPos.mMtx[2][2];
44 f32 v9 = rPos.mMtx[1][2];
45 f32 v11 = rPos.mMtx[0][2];
46 mFirePressure = pActor;
47 _9C = a3;
48 _A0 = a4;
49 _A1 = a5;
50 _8C.set(v11, v9, v7);
51 mVelocity.scale(_9C, _8C);
52 f32 z = rPos.mMtx[2][3];
53 f32 y = rPos.mMtx[1][3];
54 f32 x = rPos.mMtx[0][3];
55 mPosition.set(x, y, z);
56 mRotation.z = 0.0f;
57 mRotation.y = 0.0f;
58 mRotation.x = 0.0f;
59 MR::validateHitSensors(this);
60 MR::invalidateClipping(this);
61 setNerve(&NrvFirePressureBullet::FirePressureBulletNrvFly::sInstance);
62 makeActorAppeared();
63}
64
65void FirePressureBullet::exeFly() {
66 if (MR::isFirstStep(this)) {
67 MR::startBck(this, "Shot", nullptr);
68 MR::startBtk(this, "FireBullet");
69 }
70
71 if (MR::isBckOneTimeAndStopped(this)) {
72 MR::startBck(this, "Move", nullptr);
73 }
74
75 MR::startLevelSound(this, "SE_OJ_LV_F_PRESSURE_BULLET", -1, -1, -1);
76
77 if (_A0 && !(getNerveStep() % 5)) {
78 MR::turnDirectionToTargetDegree(this, &_8C, *MR::getPlayerPos(), 3.0f);
79 mVelocity.scale(_9C, _8C);
80 }
81
82 if (isCrash()) {
83 kill();
84 }
85 else if (MR::isStep(this, 300)) {
86 kill();
87 }
88}
89
90void FirePressureBullet::attackSensor(HitSensor *a1, HitSensor *a2) {
91 if (MR::isSensorEnemy(a2) || MR::isSensorMapObj(a2)) {
92 kill();
93 }
94 else if (!MR::isSensorPlayer(a2) && MR::sendMsgEnemyAttackFire(a2, a1)) {
95 kill();
96 }
97}
98
99bool FirePressureBullet::isCrash() const {
100 if (_A1) {
101 return false;
102 }
103
104 return MR::isBinded(this);
105}
106
107FirePressureBullet::~FirePressureBullet() {
108
109}
110
111namespace NrvFirePressureBullet {
112 INIT_NERVE(FirePressureBulletNrvFly);
113};
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.
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
TVec3f mGravity
3D vector of the actor's gravity.
Definition LiveActor.hpp:99