mirror of
https://github.com/encounter/Petari.git
synced 2026-03-30 11:34:15 -07:00
74 lines
1.8 KiB
C++
74 lines
1.8 KiB
C++
#include "Game/MapObj/CoinBox.hpp"
|
|
|
|
CoinBox::CoinBox(const char *pName) : LiveActor(pName) {
|
|
|
|
}
|
|
|
|
CoinBox::~CoinBox() {
|
|
|
|
}
|
|
|
|
void CoinBox::init(const JMapInfoIter &rIter) {
|
|
MR::initDefaultPos(this, rIter);
|
|
MR::connectToSceneMapObjMovement(this);
|
|
initSound(6, false);
|
|
initNerve(&NrvCoinBox::CoinBoxNrvWait::sInstance);
|
|
initHitSensor(1);
|
|
TVec3f box;
|
|
box.x = 0.0f;
|
|
box.y = 0.0f;
|
|
box.z = 0.0f;
|
|
MR::addHitSensorMapObj(this, "body", 8, 5.0f, box);
|
|
makeActorAppeared();
|
|
setNerve(&NrvCoinBox::CoinBoxNrvWait::sInstance);
|
|
MR::declareCoin(this, 1);
|
|
MR::setClippingFar50m(this);
|
|
initEffectKeeper(1, "Coin", false);
|
|
}
|
|
|
|
#ifdef NON_MATCHING
|
|
void CoinBox::exeHit() {
|
|
if (!getNerveStep()) {
|
|
getSensor("body")->invalidate();
|
|
MR::emitEffect(this, "CoinGet");
|
|
}
|
|
|
|
if (getNerveStep() == 0xF) {
|
|
TVec3f axis_y;
|
|
MR::getRotatedAxisY(&axis_y, mRotation);
|
|
MR::calcGravityOrZero(this);
|
|
TVec3f stack_38;
|
|
f32 val = MR::vecKillElement(axis_y, mGravity, &stack_38);
|
|
TVec3f stack_8 = stack_38 * 10.0f;
|
|
TVec3f stack_2C((mGravity * val) * 30.0f);
|
|
|
|
//TVec3f stack_2C(stack_20);
|
|
stack_2C.addInline(stack_8);
|
|
MR::appearCoinToVelocity(this, mPosition, axis_y, 1);
|
|
kill();
|
|
}
|
|
}
|
|
#endif
|
|
|
|
bool CoinBox::receiveOtherMsg(u32 msg, HitSensor *, HitSensor *) {
|
|
if (msg - 0x31 < 2) {
|
|
setNerve(&NrvCoinBox::CoinBoxNrvHit::sInstance);
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
namespace NrvCoinBox {
|
|
INIT_NERVE(CoinBoxNrvWait);
|
|
INIT_NERVE(CoinBoxNrvHit);
|
|
|
|
void CoinBoxNrvHit::execute(Spine *pSpine) const {
|
|
CoinBox* box = reinterpret_cast<CoinBox*>(pSpine->mExecutor);
|
|
box->exeHit();
|
|
}
|
|
|
|
void CoinBoxNrvWait::execute(Spine *pSpine) const {
|
|
|
|
}
|
|
}; |