Files
Petari/source/Game/MapObj/AirBubbleGenerator.cpp

70 lines
2.0 KiB
C++

#include "Game/MapObj/AirBubbleGenerator.hpp"
#include "Game/MapObj/AirBubbleHolder.hpp"
AirBubbleGenerator::~AirBubbleGenerator() {
}
AirBubbleGenerator::AirBubbleGenerator(const char *pName) : LiveActor(pName) {
_8C = 0;
mSpawnDelay = 180;
mBubbleDuration = -1;
}
void AirBubbleGenerator::init(const JMapInfoIter &rIter) {
MR::createAirBubbleHolder();
MR::initDefaultPos(this, rIter);
initModelManagerWithAnm("AirBubbleGenerator", nullptr, false);
MR::connectToSceneNoSilhouettedMapObj(this);
initEffectKeeper(0, nullptr, false);
initNerve(&NrvAirBubbleGenerator::AirBubbleGenerateNrvWait::sInstance);
initHitSensor(1);
MR::addBodyMessageSensorReceiver(this);
MR::initCollisionParts(this, "AirBubbleGenerator", getSensor(nullptr), nullptr);
MR::getJMapInfoArg0NoInit(rIter, &mSpawnDelay);
MR::getJMapInfoArg1NoInit(rIter, &mBubbleDuration);
initSound(2, false);
if (MR::useStageSwitchReadAppear(this, rIter)) {
MR::syncStageSwitchAppear(this);
makeActorDead();
}
else {
makeActorAppeared();
}
}
void AirBubbleGenerator::control() {
}
void AirBubbleGenerator::exeWait() {
s32 spawnDelay = mSpawnDelay;
if (spawnDelay - 1 == getNerveStep() % spawnDelay) {
setNerve(&NrvAirBubbleGenerator::AirBubbleGeneratorNrvGenerate::sInstance);
}
}
#ifdef NON_MATCHING
// inlined assembly math is not matching, deal with this later
void AirBubbleGenerator::exeGenerate() {
TVec3f axisY;
if (MR::isFirstStep(this)) {
MR::startSound(this, "SE_OJ_AIR_BUBBLE_APPEAR", -1, -1);
MR::startBck(this, "Generate", nullptr);
}
if (MR::isGreaterStep(this, 6)) {
MR::calcActorAxisY(&axisY, this);
MR::appearAirBubble(MR::createVecAndScaleByAndAdd_2(axisY, mPosition), mBubbleDuration);
setNerve(&NrvAirBubbleGenerator::AirBubbleGenerateNrvWait::sInstance);
}
}
#endif
namespace NrvAirBubbleGenerator {
INIT_NERVE(AirBubbleGenerateNrvWait);
INIT_NERVE(AirBubbleGeneratorNrvGenerate);
};