2023-12-13 00:40:16 -05:00
|
|
|
#include "Game/Screen/CounterLayoutAppearer.hpp"
|
|
|
|
|
#include "Game/Util/LayoutUtil.hpp"
|
|
|
|
|
#include "Game/Util/NerveUtil.hpp"
|
2022-06-30 10:21:40 -04:00
|
|
|
|
|
|
|
|
static f32 zero = 0.0f;
|
|
|
|
|
|
|
|
|
|
CounterLayoutAppearer::CounterLayoutAppearer(LayoutActor *pActor, const TVec2f &a2) : NerveExecutor("カウンタ出現制御") {
|
|
|
|
|
mLayout = pActor;
|
|
|
|
|
_C = a2.x;
|
|
|
|
|
_10 = a2.y;
|
|
|
|
|
mFollowPos.x = 0.0f;
|
|
|
|
|
mFollowPos.y = 0.0f;
|
|
|
|
|
_1C = 0.0f;
|
|
|
|
|
_20 = 0.0f;
|
2023-02-13 03:33:10 -05:00
|
|
|
MR::setFollowPos(&mFollowPos, pActor, nullptr);
|
|
|
|
|
MR::setFollowTypeAdd(mLayout, nullptr);
|
2022-06-30 10:21:40 -04:00
|
|
|
initNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvHide::sInstance);
|
|
|
|
|
MR::startAnimAndSetFrameAndStop(mLayout, "Appear", 0.0f, 0);
|
|
|
|
|
setNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvHide::sInstance);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CounterLayoutAppearer::update() {
|
|
|
|
|
updateNerve();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CounterLayoutAppearer::appear(const TVec2f &a1) {
|
|
|
|
|
_1C = a1.x;
|
|
|
|
|
_20 = a1.y;
|
|
|
|
|
MR::startAnim(mLayout, "Appear", 0);
|
|
|
|
|
updateLayoutOffset(0.0f);
|
|
|
|
|
setNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvAppear::sInstance);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CounterLayoutAppearer::disappear() {
|
|
|
|
|
setNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvDisappear::sInstance);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CounterLayoutAppearer::isAppeared() const {
|
|
|
|
|
return isNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvShow::sInstance);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CounterLayoutAppearer::isDisappeared() const {
|
|
|
|
|
return isNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvHide::sInstance);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CounterLayoutAppearer::reset() {
|
|
|
|
|
MR::startAnimAndSetFrameAndStop(mLayout, "Appear", 0.0f, 0);
|
|
|
|
|
setNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvHide::sInstance);
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-01 15:54:38 -04:00
|
|
|
#ifdef NON_MATCHING
|
2022-06-30 10:21:40 -04:00
|
|
|
void CounterLayoutAppearer::updateLayoutOffset(f32 offset) {
|
|
|
|
|
TVec2f vec;
|
|
|
|
|
f32 x = (_C + (offset * (zero - _C))) + _1C;
|
|
|
|
|
vec.x = zero;
|
|
|
|
|
vec.y = zero;
|
|
|
|
|
f32 y = ((_10 + (offset * (zero - _10))) + _20);
|
|
|
|
|
mFollowPos.x = x;
|
|
|
|
|
mFollowPos.y = y;
|
|
|
|
|
}
|
2022-07-01 15:54:38 -04:00
|
|
|
#endif
|
2022-06-30 10:21:40 -04:00
|
|
|
|
|
|
|
|
void CounterLayoutAppearer::exeAppear() {
|
2024-07-19 21:00:32 -04:00
|
|
|
updateLayoutOffset(MR::calcNerveEaseOutRate(this, MR::getAnimFrameMax(mLayout, (u32)0)));
|
2022-06-30 10:21:40 -04:00
|
|
|
if (MR::isAnimStopped(mLayout, 0)) {
|
|
|
|
|
setNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvShow::sInstance);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CounterLayoutAppearer::exeDisappear() {
|
|
|
|
|
if (MR::isFirstStep(this)) {
|
|
|
|
|
MR::startAnim(mLayout, "End", 0);
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-19 21:00:32 -04:00
|
|
|
updateLayoutOffset((1.0f - MR::calcNerveEaseInRate(this, MR::getAnimFrameMax(mLayout, (u32)0))));
|
2022-06-30 10:21:40 -04:00
|
|
|
|
|
|
|
|
if (MR::isAnimStopped(mLayout, 0)) {
|
|
|
|
|
setNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvHide::sInstance);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CounterLayoutAppearer::~CounterLayoutAppearer() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
namespace NrvCounterLayoutAppearer {
|
|
|
|
|
INIT_NERVE(CounterLayoutAppearerNrvHide);
|
|
|
|
|
INIT_NERVE(CounterLayoutAppearerNrvAppear);
|
|
|
|
|
INIT_NERVE(CounterLayoutAppearerNrvShow);
|
|
|
|
|
INIT_NERVE(CounterLayoutAppearerNrvDisappear);
|
|
|
|
|
|
|
|
|
|
void CounterLayoutAppearerNrvDisappear::execute(Spine *pSpine) const {
|
|
|
|
|
CounterLayoutAppearer* layout = reinterpret_cast<CounterLayoutAppearer*>(pSpine->mExecutor);
|
|
|
|
|
layout->exeDisappear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CounterLayoutAppearerNrvShow::execute(Spine *pSpine) const {
|
|
|
|
|
CounterLayoutAppearer* layout = reinterpret_cast<CounterLayoutAppearer*>(pSpine->mExecutor);
|
|
|
|
|
|
|
|
|
|
if (MR::isFirstStep(layout)) {
|
|
|
|
|
layout->updateLayoutOffset(1.0f);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CounterLayoutAppearerNrvAppear::execute(Spine *pSpine) const {
|
|
|
|
|
CounterLayoutAppearer* layout = reinterpret_cast<CounterLayoutAppearer*>(pSpine->mExecutor);
|
|
|
|
|
layout->exeAppear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CounterLayoutAppearerNrvHide::execute(Spine *pSpine) const {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
};
|