1#include "Game/MapObj/CoinGroup.hpp"
2#include "Game/Util.hpp"
4CoinGroup::CoinGroup(
const char *pName) :
LiveActor(pName) {
9 mIsPurpleCoinGroup =
false;
14 MR::getJMapInfoArg0NoInit(rIter, &count);
17 MR::getJMapInfoArg1NoInit(rIter, &mTimeLimit);
18 mCoinArray =
new Coin*[mCoinCount];
20 for (u32 i = 0; i < mCoinCount; i++) {
21 if (mIsPurpleCoinGroup) {
22 mCoinArray[i] =
reinterpret_cast<Coin*
>(MR::createPurpleCoin(
this, getCoinName()));
25 mCoinArray[i] =
reinterpret_cast<Coin*
>(MR::createCoin(
this, getCoinName()));
28 mCoinArray[i]->setShadowAndPoseModeFromJMapIter(rIter);
30 if (mCoinArray[i]->_BA) {
31 MR::initDefaultPos(mCoinArray[i], rIter);
34 Coin* coin = mCoinArray[i];
45 if (MR::tryRegisterDemoCast(
this, rIter)) {
47 MR::registerDemoActionFunctor(
this, demoFunc,
"コイン出現");
49 else if (MR::useStageSwitchReadAppear(
this, rIter)) {
50 MR::connectToSceneMapObjMovement(
this);
51 MR::syncStageSwitchAppear(
this);
52 MR::initActorCamera(
this, rIter, &mCameraInfo);
54 if (MR::isExistActorCamera(mCameraInfo)) {
55 initNerve(&NrvCoinGroup::CoinGroupNrvDemoAppear::sInstance);
58 initNerve(&NrvCoinGroup::CoinGroupNrvAppear::sInstance);
65 if (MR::useStageSwitchReadB(
this, rIter)) {
67 MR::listenStageSwitchOnB(
this, killFunc);
70 MR::invalidateClipping(
this);
74void CoinGroup::killCoinAll() {
75 for (u32 i = 0; i < mCoinCount; i++) {
76 mCoinArray[i]->kill();
80void CoinGroup::appearCoinAll() {
81 if (mTimeLimit >= 0) {
89void CoinGroup::appearCoinFix() {
90 for (u32 i = 0; i < mCoinCount; i++) {
91 mCoinArray[i]->appear();
95void CoinGroup::appearCoinAllTimer() {
96 for (u32 i = 0; i < mCoinCount; i++) {
97 mCoinArray[i]->appearFixTimer(mTimeLimit, -1);
101void CoinGroup::setCoinTrans(s32 coinIndex,
const TVec3f &rPos) {
102 Coin* coin = mCoinArray[coinIndex];
108void CoinGroup::appear() {
111 if (isNerve(&NrvCoinGroup::CoinGroupNrvDemoAppear::sInstance)) {
112 MR::requestStartDemo(
this,
"出現", &NrvCoinGroup::CoinGroupNrvDemoAppear::sInstance, &NrvCoinGroup::CoinGroupNrvTryStartDemo::sInstance);
116void CoinGroup::exeAppear() {
117 if (MR::isStep(
this, 3)) {
118 if (mIsPurpleCoinGroup) {
119 MR::startSystemSE(
"SE_SY_PURPLE_COIN_APPEAR", -1, -1);
122 MR::startSystemSE(
"SE_SY_COIN_APPEAR", -1, -1);
126 setNerve(&NrvCoinGroup::CoinGroupNrvKill::sInstance);
131void CoinGroup::exeDemoAppear() {
132 if (MR::isFirstStep(
this)) {
133 MR::startActorCameraTargetSelf(
this, mCameraInfo, 30);
134 MR::startSystemSE(
"SE_SY_COIN_APPEAR", -1, -1);
138 if (MR::isGreaterStep(
this, 90)) {
139 MR::endDemo(
this,
"出現");
140 MR::endActorCamera(
this, mCameraInfo,
false, -1);
141 setNerve(&NrvCoinGroup::CoinGroupNrvKill::sInstance);
146namespace NrvCoinGroup {
147 INIT_NERVE(CoinGroupNrvAppear);
148 INIT_NERVE(CoinGroupNrvTryStartDemo);
149 INIT_NERVE(CoinGroupNrvDemoAppear);
150 INIT_NERVE(CoinGroupNrvKill);
152 void CoinGroupNrvKill::execute(
Spine *pSpine)
const {
157 void CoinGroupNrvDemoAppear::execute(
Spine *pSpine)
const {
159 coin->exeDemoAppear();
162 void CoinGroupNrvTryStartDemo::execute(
Spine *pSpine)
const {
166 void CoinGroupNrvAppear::execute(
Spine *pSpine)
const {
172const char* CoinGroup::getCoinName()
const {
173 return "コイン(グループ配置)";
176void CoinGroup::placementCoin() {
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
The basis of a drawable actor that can contain states (see: Nerve)
TVec3f mPosition
3D vector of the actor's position.
TVec3f mScale
3D vector of the actor's scale.
void initWithoutIter()
Initializes a NameObj without a JMapInfoIter instance.