2023-12-13 00:40:16 -05:00
|
|
|
#include "Game/MapObj/HipDropMoveObj.hpp"
|
|
|
|
|
#include "Game/MapObj/StageEffectDataTable.hpp"
|
|
|
|
|
#include "Game/Util.hpp"
|
2022-01-05 14:03:39 -05:00
|
|
|
|
|
|
|
|
HipDropDemoMoveObj::~HipDropDemoMoveObj() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HipDropMoveObj::HipDropMoveObj(const char *pName) : LiveActor(pName) {
|
|
|
|
|
mObjectName = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void HipDropMoveObj::init(const JMapInfoIter &rIter) {
|
|
|
|
|
MR::initDefaultPos(this, rIter);
|
|
|
|
|
MR::getObjectName(&mObjectName, rIter);
|
|
|
|
|
initModelManagerWithAnm(mObjectName, 0, false);
|
|
|
|
|
MR::connectToSceneMapObj(this);
|
|
|
|
|
initEffectKeeper(0, 0, false);
|
|
|
|
|
initSound(4, false);
|
|
|
|
|
initHitSensor(1);
|
|
|
|
|
TVec3f sensor;
|
|
|
|
|
sensor.x = 0.0f;
|
|
|
|
|
sensor.y = 0.0f;
|
|
|
|
|
sensor.z = 0.0f;
|
|
|
|
|
HitSensor* jointSensor = MR::addHitSensorAtJointMapObj(this, "body", cSwitchJointName, 0, 225.0f, sensor);
|
|
|
|
|
MtxPtr mtx = MR::getJointMtx(this, cMoveJointName);
|
|
|
|
|
MR::initCollisionParts(this, mObjectName, jointSensor, mtx);
|
|
|
|
|
MR::setClippingTypeSphereContainsModelBoundingBox(this, 100.0f);
|
|
|
|
|
MR::setGroupClipping(this, rIter, 8);
|
|
|
|
|
MR::useStageSwitchWriteA(this, rIter);
|
|
|
|
|
initNerve(&NrvHipDropMoveObj::HostTypeWait::sInstance);
|
|
|
|
|
MR::tryRegisterDemoCast(this, rIter);
|
|
|
|
|
makeActorAppeared();
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-23 00:59:05 -04:00
|
|
|
bool HipDropMoveObj::receiveMsgPlayerAttack(u32 msg, HitSensor *a2, HitSensor *a3) {
|
2022-01-05 14:03:39 -05:00
|
|
|
if (MR::isMsgPlayerHipDropFloor(msg)) {
|
|
|
|
|
if (!isNerve(&NrvHipDropMoveObj::HostTypeWait::sInstance)) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
f32 radius = a3->mRadius;
|
|
|
|
|
f32 dist = MR::calcDistanceToPlayer(a3->mPosition);
|
|
|
|
|
if (radius < dist) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setNerve(&NrvHipDropMoveObj::HostTypeMove::sInstance);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool HipDropMoveObj::isEndMove() const {
|
|
|
|
|
return MR::isBckStopped(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void HipDropMoveObj::exeMove() {
|
|
|
|
|
if (MR::isFirstStep(this)) {
|
|
|
|
|
MR::startAllAnim(this, cMoveAnimName);
|
|
|
|
|
const char* startSe = MR::StageEffect::getStartSe(mObjectName);
|
|
|
|
|
|
|
|
|
|
if (startSe) {
|
|
|
|
|
MR::startSound(this, startSe, -1, -1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MR::StageEffect::rumblePadStart(this, mObjectName);
|
|
|
|
|
MR::StageEffect::shakeCameraMoving(this, mObjectName);
|
|
|
|
|
MR::tryStartDemoRegistered(this, 0);
|
|
|
|
|
moveStart();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
s32 steps = MR::StageEffect::getStopSeSteps(mObjectName);
|
|
|
|
|
const char* movingSe = MR::StageEffect::getMovingSe(mObjectName);
|
|
|
|
|
|
|
|
|
|
if (movingSe) {
|
|
|
|
|
if (steps >= 0) {
|
|
|
|
|
if (MR::isLessStep(this, steps)) {
|
|
|
|
|
MR::startLevelSound(this, movingSe, -1, -1, -1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
MR::startLevelSound(this, movingSe, -1, -1, -1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (steps >= 0) {
|
|
|
|
|
if (MR::isStep(this, steps)) {
|
|
|
|
|
const char* stopSe = MR::StageEffect::getStopSe(mObjectName);
|
|
|
|
|
|
|
|
|
|
if (stopSe) {
|
|
|
|
|
MR::startSound(this, stopSe, -1, -1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (MR::StageEffect::isRiddleSeTypeStop(mObjectName)) {
|
|
|
|
|
MR::startSystemSE("SE_SY_READ_RIDDLE_S", -1, -1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
moving();
|
|
|
|
|
|
|
|
|
|
if (isEndMove()) {
|
|
|
|
|
if (MR::isValidSwitchA(this)) {
|
|
|
|
|
MR::onSwitchA(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MR::StageEffect::rumblePadStop(this, mObjectName);
|
|
|
|
|
MR::StageEffect::stopShakingCameraMoving(this, mObjectName);
|
|
|
|
|
|
|
|
|
|
if (steps < 0) {
|
|
|
|
|
const char* stopSe = MR::StageEffect::getStopSe(mObjectName);
|
|
|
|
|
|
|
|
|
|
if (stopSe) {
|
|
|
|
|
MR::startSound(this, stopSe, -1, -1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
moveEnd();
|
|
|
|
|
setNerve(&NrvHipDropMoveObj::HostTypeDone::sInstance);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HipDropDemoMoveObj::HipDropDemoMoveObj(const char *pName) : HipDropMoveObj(pName) {
|
|
|
|
|
mMtx.identity();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HipDropMoveObj::~HipDropMoveObj() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void HipDropDemoMoveObj::moveStart() {
|
2023-02-13 03:33:10 -05:00
|
|
|
MR::startBckPlayer("Wait", (char*)nullptr);
|
2022-01-05 14:03:39 -05:00
|
|
|
MtxPtr mtx = MR::getPlayerDemoActor()->getBaseMtx();
|
|
|
|
|
TMtx34f stack_38;
|
|
|
|
|
stack_38.set(mtx);
|
|
|
|
|
MtxPtr jointMtx = MR::getJointMtx(this, cMoveJointName);
|
|
|
|
|
TMtx34f stack_8;
|
|
|
|
|
stack_8.set(jointMtx);
|
|
|
|
|
stack_8.invert(stack_8);
|
|
|
|
|
mMtx.concat(stack_8, stack_38);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void HipDropDemoMoveObj::moving() {
|
|
|
|
|
if (MR::isDemoActive()) {
|
|
|
|
|
MtxPtr jointMtx = MR::getJointMtx(this, cMoveJointName);
|
|
|
|
|
TMtx34f stack_8;
|
|
|
|
|
stack_8.set(jointMtx);
|
|
|
|
|
stack_8.concat(stack_8, mMtx);
|
|
|
|
|
TVec3f vec;
|
|
|
|
|
LiveActor* demoActor = MR::getPlayerDemoActor();
|
|
|
|
|
f32 z = stack_8.mMtx[2][3];
|
|
|
|
|
f32 y = stack_8.mMtx[1][3];
|
|
|
|
|
f32 x = stack_8.mMtx[0][3];
|
|
|
|
|
demoActor->mPosition.set(x, y, z);
|
|
|
|
|
MR::setPlayerBaseMtx((MtxPtr)&stack_8);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
namespace NrvHipDropMoveObj {
|
|
|
|
|
HostTypeWait HostTypeWait::sInstance;
|
|
|
|
|
HostTypeMove HostTypeMove::sInstance;
|
|
|
|
|
HostTypeDone HostTypeDone::sInstance;
|
|
|
|
|
|
|
|
|
|
void HostTypeDone::execute(Spine* pSpine) const {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void HostTypeMove::execute(Spine *pSpine) const {
|
|
|
|
|
HipDropMoveObj* obj = reinterpret_cast<HipDropMoveObj*>(pSpine->mExecutor);
|
|
|
|
|
obj->exeMove();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void HostTypeWait::execute(Spine* pSpine) const {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void HipDropMoveObj::moveStart() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void HipDropMoveObj::moving() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void HipDropMoveObj::moveEnd() {
|
|
|
|
|
|
|
|
|
|
}
|