1#include "Game/Screen/CoinCounter.hpp"
2#include "Game/Screen/CounterLayoutController.hpp"
3#include "Game/Util.hpp"
5CoinCounter::CoinCounter(
const char *pName) :
LayoutActor(pName, true) {
9 mLayoutAppearer =
nullptr;
10 mPaneRumbler =
nullptr;
17 initLayoutManager(
"CoinCounter", 2);
18 MR::createAndAddPaneCtrl(
this,
"Counter", 1);
19 MR::createAndAddPaneCtrl(
this,
"CoinCounter", 1);
20 MR::setFollowPos(&mFollowPos,
this,
"CoinCounter");
21 initEffectKeeper(0,
nullptr,
nullptr);
24 initNerve(&NrvCoinCounter::CoinCounterNrvHide::sInstance);
25 MR::connectToSceneLayout(
this);
29void CoinCounter::appear() {
30 mLayoutAppearer->reset();
31 mPaneRumbler->reset();
35 setNerve(&NrvCoinCounter::CoinCounterNrvHide::sInstance);
36 LayoutActor::appear();
39void CoinCounter::forceAppear() {
40 if (!isNerve(&NrvCoinCounter::CoinCounterNrvWait::sInstance)) {
42 setNerve(&NrvCoinCounter::CoinCounterNrvAppear::sInstance);
48void CoinCounter::disappear() {
50 setNerve(&NrvCoinCounter::CoinCounterNrvDisappear::sInstance);
53bool CoinCounter::isWait()
const {
54 return isNerve(&NrvCoinCounter::CoinCounterNrvWait::sInstance);
57void CoinCounter::control() {
59 mLayoutAppearer->update();
60 mPaneRumbler->update();
63void CoinCounter::updateCounter() {
64 s32 coinNum = MR::getCoinNum();
73 if (isNerve(&NrvCoinCounter::CoinCounterNrvWait::sInstance)) {
77 MR::startAnim(
this,
"Flash", 0);
78 MR::emitEffect(
this,
"CoinCounterLight");
79 mPaneRumbler->start();
82 if (!isNerve(&NrvCoinCounter::CoinCounterNrvAppear::sInstance)) {
83 if (!isNerve(&NrvCoinCounter::CoinCounterNrvWait::sInstance)) {
84 setNerve(&NrvCoinCounter::CoinCounterNrvAppear::sInstance);
87 setNerve(&NrvCoinCounter::CoinCounterNrvWait::sInstance);
93 char* pane =
"Position001";
103 MR::copyPaneTrans(&mFollowPos,
this, pane);
104 MR::setTextBoxNumberRecursive(
this,
"Counter", _24);
107void CoinCounter::exeHide() {
108 if (MR::isFirstStep(
this)) {
110 MR::hideLayout(
this);
114void CoinCounter::exeAppear() {
115 if (MR::isFirstStep(
this)) {
116 MR::showLayout(
this);
117 if (MR::isStageAstroLocation()) {
121 mLayoutAppearer->appear(vec);
127 mLayoutAppearer->appear(vec);
130 MR::startAnim(
this,
"Wait", 1);
133 if (mLayoutAppearer->isAppeared()) {
134 setNerve(&NrvCoinCounter::CoinCounterNrvWait::sInstance);
138void CoinCounter::exeWait() {
139 if (!mIsAppear && _24 == mCoinCount) {
140 if (CounterLayoutController::isWaitToDisappearCounter(
this)) {
141 setNerve(&NrvCoinCounter::CoinCounterNrvDisappear::sInstance);
146void CoinCounter::exeDisappear() {
147 if (MR::isFirstStep(
this)) {
148 mLayoutAppearer->disappear();
151 if (mLayoutAppearer->isDisappeared()) {
152 setNerve(&NrvCoinCounter::CoinCounterNrvHide::sInstance);
156CoinCounter::~CoinCounter() {
160namespace NrvCoinCounter {
161 INIT_NERVE(CoinCounterNrvHide);
162 INIT_NERVE(CoinCounterNrvAppear);
163 INIT_NERVE(CoinCounterNrvWait);
164 INIT_NERVE(CoinCounterNrvDisappear);
166 void CoinCounterNrvDisappear::execute(
Spine *pSpine)
const {
168 counter->exeDisappear();
171 void CoinCounterNrvWait::execute(
Spine *pSpine)
const {
176 void CoinCounterNrvAppear::execute(
Spine *pSpine)
const {
178 counter->exeAppear();
181 void CoinCounterNrvHide::execute(
Spine *pSpine)
const {
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.