Files
Petari/source/Game/Enemy/WalkerStateBindStarPointer.cpp

72 lines
2.1 KiB
C++

#include "Game/Enemy/WalkerStateBindStarPointer.hpp"
WalkerStateBindStarPointer::WalkerStateBindStarPointer(LiveActor *pActor, AnimScaleController *pController) : ActorStateBase("歩行型スターポインタ拘束") {
mHostActor = pActor;
mScaleController = pController;
mUpdateCounter = 0;
mHasEffect = false;
initNerve(&NrvWalkerStateBindStarPointer::WalkerStateBindStarPointerNrvBind::sInstance);
if (!MR::isRegisteredEffect(pActor, "Touch")) {
mHasEffect = true;
MR::addEffect(pActor, "PointerTouch");
}
}
void WalkerStateBindStarPointer::appear() {
mIsDead = false;
setNerve(&NrvWalkerStateBindStarPointer::WalkerStateBindStarPointerNrvBind::sInstance);
}
void WalkerStateBindStarPointer::kill() {
mIsDead = true;
if (mScaleController != nullptr) {
mScaleController->startAnim();
}
const char* effectName = mHasEffect ? "PointerTouch" : "Touch";
MR::deleteEffect(mHostActor, effectName);
if (MR::isExistBck(mHostActor, nullptr)) {
MR::setBckRate(mHostActor, 1.0f);
}
}
bool WalkerStateBindStarPointer::tryStartPointBind() const {
return MR::isStarPointerPointing2POnPressButton(mHostActor, "", true, false);
}
void WalkerStateBindStarPointer::exeBind() {
if (MR::isFirstStep(this)) {
MR::startDPDHitSound();
mUpdateCounter = 0;
const char* effectName = mHasEffect ? "PointerTouch" : "Touch";
MR::emitEffect(mHostActor, effectName);
if (MR::isExistBck(mHostActor, nullptr)) {
MR::setBckRate(mHostActor, 0.0f);
}
if (mScaleController != nullptr) {
mScaleController->startDpdHitVibration();
}
}
MR::startDPDFreezeLevelSound(mHostActor);
MR::zeroVelocity(mHostActor);
if (MR::isStarPointerPointing2POnPressButton(mHostActor, "", true, false)) {
mUpdateCounter = 0;
}
else {
mUpdateCounter++;
}
if (mUpdateCounter > 5) {
update();
}
}
WalkerStateBindStarPointer::~WalkerStateBindStarPointer() {
}
namespace NrvWalkerStateBindStarPointer {
INIT_NERVE(WalkerStateBindStarPointerNrvBind);
};