1#include "Game/MapObj/MechaKoopaPartsArm.hpp"
2#include "Game/Util.hpp"
4MechaKoopaPartsArm::MechaKoopaPartsArm(
const char *pName) :
MapObjActor(pName) {
10 mIsRightArm = isObjectName(
"MechaKoopaPartsArmRight");
12 info.setupHioNode(
"地形オブジェ");
13 info.setupDefaultPos();
14 info.setupConnectToScene();
15 info.setupEffect(
nullptr);
17 info.setupNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvWaitRear::sInstance);
21 info.setupRailMover();
22 info.setupBaseMtxFollowTarget();
25 initialize(rIter, info);
26 MapObjActorUtil::startRotator(
this);
29void MechaKoopaPartsArm::exeWait() {
30 if (MapObjActorUtil::isRotatorMoving(
this)) {
31 if (isNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvWaitFront::sInstance)) {
32 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveStartRear::sInstance);
35 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveStartFront::sInstance);
40void MechaKoopaPartsArm::exeMoveStart() {
41 if (MR::isFirstStep(
this)) {
42 MapObjActorUtil::pauseRotator(
this);
44 if (isNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveStartFront::sInstance)) {
45 MR::startBck(
this,
"Front",
nullptr);
48 MR::startBck(
this,
"Rear",
nullptr);
51 MR::startSound(
this,
"SE_OJ_M_KOOPA_ARM_START", -1, -1);
52 if (MR::isOnPlayer(
this)) {
53 MR::shakeCameraNormal();
54 MR::tryRumblePadMiddle(
this, 0);
58 if (MR::isBckStopped(
this)) {
59 if (isNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveStartFront::sInstance)) {
60 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveFront::sInstance);
63 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveRear::sInstance);
68void MechaKoopaPartsArm::exeMove() {
69 MR::startLevelSound(
this,
"SE_OJ_LV_M_KOOPA_ARM_MOVE", -1, -1, -1);
71 if (!MapObjActorUtil::isRotatorMoving(
this)) {
72 MR::startSound(
this,
"SE_OJ_M_KOOPA_ARM_END", -1, -1);
74 if (isNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvMoveFront::sInstance)) {
75 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvWaitFront::sInstance);
78 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvWaitRear::sInstance);
83void MechaKoopaPartsArm::exeBreakStart() {
84 if (MR::isFirstStep(
this)) {
85 MR::startBck(
this,
"BreakStart",
nullptr);
86 MR::startSound(
this,
"SE_OJ_M_KOOPA_ARM_FALL_ST", -1, -1);
87 MapObjActorUtil::pauseRotator(
this);
90 if (MR::isBckStopped(
this)) {
91 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvBreak::sInstance);
95void MechaKoopaPartsArm::exeBreak() {
96 if (MR::isFirstStep(
this)) {
97 MR::emitEffect(
this,
"Spark");
98 MR::emitEffect(
this,
"BlackSmoke");
99 MapObjActorUtil::startRailMover(
this);
102 MR::startLevelSound(
this,
"SE_OJ_LV_M_KOOPA_ARM_FALL", -1, -1, -1);
103 if (MapObjActorUtil::isRailMoverReachedEnd(
this)) {
104 MR::startSound(
this,
"SE_OJ_M_KOOPA_ARM_BREAK", -1, -1);
112 MR::listenStageSwitchOnB(
this, breakFunc);
120void MechaKoopaPartsArm::startBreak() {
121 setNerve(&NrvMechaKoopaPartsArm::MechaKoopaPartsArmNrvBreakStart::sInstance);
124namespace NrvMechaKoopaPartsArm {
125 INIT_NERVE(MechaKoopaPartsArmNrvWaitFront);
126 INIT_NERVE(MechaKoopaPartsArmNrvWaitRear);
127 INIT_NERVE(MechaKoopaPartsArmNrvMoveStartFront);
128 INIT_NERVE(MechaKoopaPartsArmNrvMoveStartRear);
129 INIT_NERVE(MechaKoopaPartsArmNrvMoveFront);
130 INIT_NERVE(MechaKoopaPartsArmNrvMoveRear);
131 INIT_NERVE(MechaKoopaPartsArmNrvBreakStart);
132 INIT_NERVE(MechaKoopaPartsArmNrvBreak);
134 void MechaKoopaPartsArmNrvBreak::execute(
Spine *pSpine)
const {
139 void MechaKoopaPartsArmNrvBreakStart::execute(
Spine *pSpine)
const {
141 arm->exeBreakStart();
144 void MechaKoopaPartsArmNrvMoveRear::execute(
Spine *pSpine)
const {
149 void MechaKoopaPartsArmNrvMoveFront::execute(
Spine *pSpine)
const {
154 void MechaKoopaPartsArmNrvMoveStartRear::executeOnEnd(
Spine *pSpine)
const {
156 MapObjActorUtil::resumeAllMapPartsFunctions(arm);
159 void MechaKoopaPartsArmNrvMoveStartRear::execute(
Spine *pSpine)
const {
164 void MechaKoopaPartsArmNrvMoveStartFront::executeOnEnd(
Spine *pSpine)
const {
166 MapObjActorUtil::resumeAllMapPartsFunctions(arm);
169 void MechaKoopaPartsArmNrvMoveStartFront::execute(
Spine *pSpine)
const {
174 void MechaKoopaPartsArmNrvWaitRear::execute(
Spine *pSpine)
const {
179 void MechaKoopaPartsArmNrvWaitFront::execute(
Spine *pSpine)
const {
185MechaKoopaPartsArm::~MechaKoopaPartsArm() {
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.