mirror of
https://github.com/encounter/Petari.git
synced 2026-03-30 11:34:15 -07:00
166 lines
4.6 KiB
C++
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);
|
|
} |