SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
AirBubbleGenerator.cpp
1#include "Game/MapObj/AirBubbleGenerator.hpp"
2#include "Game/MapObj/AirBubbleHolder.hpp"
3
4AirBubbleGenerator::~AirBubbleGenerator() {
5
6}
7
8AirBubbleGenerator::AirBubbleGenerator(const char *pName) : LiveActor(pName) {
9 _8C = 0;
10 mSpawnDelay = 180;
11 mBubbleDuration = -1;
12}
13
15 MR::createAirBubbleHolder();
16 MR::initDefaultPos(this, rIter);
17 initModelManagerWithAnm("AirBubbleGenerator", nullptr, false);
18 MR::connectToSceneNoSilhouettedMapObj(this);
19 initEffectKeeper(0, nullptr, false);
20 initNerve(&NrvAirBubbleGenerator::AirBubbleGenerateNrvWait::sInstance);
21 initHitSensor(1);
22 MR::addBodyMessageSensorReceiver(this);
23 MR::initCollisionParts(this, "AirBubbleGenerator", getSensor(nullptr), nullptr);
24 MR::getJMapInfoArg0NoInit(rIter, &mSpawnDelay);
25 MR::getJMapInfoArg1NoInit(rIter, &mBubbleDuration);
26 initSound(2, false);
27
28 if (MR::useStageSwitchReadAppear(this, rIter)) {
29 MR::syncStageSwitchAppear(this);
30 makeActorDead();
31 }
32 else {
33 makeActorAppeared();
34 }
35}
36
37void AirBubbleGenerator::control() {
38
39}
40
41void AirBubbleGenerator::exeWait() {
42 s32 spawnDelay = mSpawnDelay;
43 if (spawnDelay - 1 == getNerveStep() % spawnDelay) {
44 setNerve(&NrvAirBubbleGenerator::AirBubbleGeneratorNrvGenerate::sInstance);
45 }
46}
47
48#ifdef NON_MATCHING
49// inlined assembly math is not matching, deal with this later
50void AirBubbleGenerator::exeGenerate() {
51 TVec3f axisY;
52
53 if (MR::isFirstStep(this)) {
54 MR::startSound(this, "SE_OJ_AIR_BUBBLE_APPEAR", -1, -1);
55 MR::startBck(this, "Generate", nullptr);
56 }
57
58 if (MR::isGreaterStep(this, 6)) {
59 MR::calcActorAxisY(&axisY, this);
60 MR::appearAirBubble(MR::createVecAndScaleByAndAdd_2(axisY, mPosition), mBubbleDuration);
61 setNerve(&NrvAirBubbleGenerator::AirBubbleGenerateNrvWait::sInstance);
62 }
63}
64#endif
65
66namespace NrvAirBubbleGenerator {
67 INIT_NERVE(AirBubbleGenerateNrvWait);
68 INIT_NERVE(AirBubbleGeneratorNrvGenerate);
69};
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 mPosition
3D vector of the actor's position.
Definition LiveActor.hpp:95
HitSensor * getSensor(const char *pSensorName) const
Gets a sensor.