Files
2024-07-17 09:15:13 -04:00

166 lines
4.6 KiB
C++

#include "Game/MapObj/LavaSteam.hpp"
LavaSteam::LavaSteam(const char* pName) : LiveActor(pName) {
_8C.x = 0.0f;
_8C.y = 1.0f;
_8C.z = 0.0f;
_98.x = 1.0f;
_98.y = 1.0f;
_98.z = 1.0f;
}
void LavaSteam::init(const JMapInfoIter& rIter) {
MR::initDefaultPos(this, rIter);
initModelManagerWithAnm("LavaSteam", 0, 0);
initEffectKeeper(0, 0, false);
MR::setEffectHostSRT(this, "Sign", &mPosition, &mRotation, &_98);
initHitSensor(1);
TVec3f vec;
vec.x = 0.0f;
vec.y = 250.0f;
vec.z = 0.0f;
HitSensor* pSensor = MR::addHitSensorMapObj(this, "body", 8, 250.0f, vec);
MR::setClippingTypeSphere(this, 250.0f, &pSensor->mPosition);
MR::setGroupClipping(this, rIter, 0x10);
initNerve(&NrvLavaSteam::HostTypeWait::sInstance);
if (MR::useStageSwitchReadA(this, rIter)) {
setNerve(&NrvLavaSteam::HostTypeWaitForSwitchOn::sInstance);
MR::listenStageSwitchOnA(this, MR::Functor(this, &startSteam));
}
else if (MR::tryRegisterDemoCast(this, rIter)) {
setNerve(&NrvLavaSteam::HostTypeWaitForSwitchOn::sInstance);
MR::registerDemoActionFunctor(this, MR::Functor(this, &startSteam), 0);
}
MR::useStageSwitchSleep(this, rIter);
initSound(4, 0);
MR::connectToSceneNoSilhouettedMapObj(this);
makeActorAppeared();
}
#ifdef NON_MATCHING
// A lot is wrong here
void LavaSteam::initAfterPlacement() {
TMtx34f mtx;
mtx.identity();
TVec3f vec = mRotation*0.017453292;
f32 vecz = vec.z;
f32 vecy = vec.y;
f32 vecx = vec.x;
f32 cosz = cos(vecz);
f32 cosy = cos(vecy);
f32 cosx = cos(vecx);
f32 sinz = sin(vecz);
f32 siny = sin(vecy);
f32 sinx = sin(vecx);
f32 sinx2 = sinx;
f32 calc3 = (sinx*cosy);
mtx.mMtx[0][0] = (cosy*cosz);
mtx.mMtx[2][1] = (sinx*cosy);
mtx.mMtx[1][0] = (cosy*sinz);
f32 calc2 = ((cosx * cosz) + ((sinx * siny) * sinz));
f32 calc1 = (((sinx * siny) * cosz) - (cosx * sinz));
mtx.mMtx[1][1] = calc2;
mtx.mMtx[0][2] = calc1;
mtx.mMtx[0][3] = ((cosx * cosz) * siny) + (sinx2 * sinz);
mtx.mMtx[2][0] = -siny;
mtx.mMtx[2][2] = (cosx * cosy);
mtx.mMtx[1][2] = ((cosx * sinz) * siny) - (sinx2 * cosz);
_8C.set(calc1, calc2, calc3);
//_98.set(mtx.mMtx[0][1], mtx.mMtx[1][1], (sinz*cosy));
MR::normalize(&_8C);
}
#endif
#ifdef NON_MATCHING
// Incomplete
void LavaSteam::attackSensor(HitSensor* pSender, HitSensor* pReceiver) {
if (!isNerve(&NrvLavaSteam::HostTypeWait::sInstance) && !isNerve(&NrvLavaSteam::HostTypeWaitForSwitchOn::sInstance)) {
if (MR::isSensorPlayerOrRide(pReceiver)) {
f32 f = 0.69999999f*pReceiver->mRadius;
if (isNerve(&NrvLavaSteam::HostTypeSteam::sInstance)) {
TVec3f stack_30 = _8C*400.0f;
TVec3f stack_3C = TVec3f(mPosition);
TVec3f stack_48;
}
}
} // END OF FUNC
}
#endif
void LavaSteam::startClipped() {
LiveActor::startClipped();
MR::deleteEffectAll(this);
}
#ifdef NON_MATCHING
// Instruction swap
void LavaSteam::endClipped() {
LiveActor::endClipped();
isNerve(&NrvLavaSteam::HostTypeWaitForSwitchOn::sInstance);
}
void LavaSteam::startSteam() {
setNerve(&NrvLavaSteam::HostTypeSteam::sInstance);
}
#endif
#ifdef NON_MATCHING
void LavaSteam::exeWait() {
if (MR::isFirstStep(this)) {
MR::invalidateHitSensors(this);
MR::emitEffect(this, "Sign");
_98.x = 1.0f;
_98.y = 1.0f;
_98.z = 1.0f;
}
if (MR::isGreaterStep(this, 82)) {
_98.setAll(MR::getEaseInValue((90-getNerveStep())*0.125f, 0.001f, 1.0f, 1.0f));
}
if (MR::isGreaterStep(this, 90))
MR::forceDeleteEffect(this, "Sign");
if (MR::isGreaterStep(this, 120))
setNerve(&NrvLavaSteam::HostTypeSteam::sInstance);
}
#endif
void LavaSteam::exeSteam() {
if (MR::isFirstStep(this)) {
MR::emitEffect(this, "Steam");
MR::validateHitSensors(this);
}
MR::startLevelSound(this, "SE_OJ_LV_LAVA_STEAM_OUT", -1, -1, -1);
if (MR::isStep(this, 90)) {
MR::deleteEffect(this, "Steam");
setNerve(&NrvLavaSteam::HostTypeSteamEnd::sInstance);
}
}
LavaSteam::~LavaSteam() {
}
namespace NrvLavaSteam {
void HostTypeSteamEnd::execute(Spine* pSpine) const {
LavaSteam* pActor = (LavaSteam*)pSpine->mExecutor;
if (MR::isStep(pActor, 0x5A))
pActor->setNerve(&NrvLavaSteam::HostTypeWait::sInstance);
}
HostTypeSteamEnd(HostTypeSteamEnd::sInstance);
HostTypeSteam(HostTypeSteam::sInstance);
HostTypeWait(HostTypeWait::sInstance);
HostTypeWaitForSwitchOn(HostTypeWaitForSwitchOn::sInstance);
}