1#include "Game/MapObj/ChipBase.hpp"
2#include "Game/MapObj/ChipHolder.hpp"
4ChipBase::ChipBase(
const char *pName, s32 chipType,
const char *pChipName) :
LiveActor(pName) {
10 mClippingRange.x = 0.0f;
11 mClippingRange.y = 0.0f;
12 mClippingRange.z = 0.0f;
19 MR::createChipHolder(mChipType);
24 initEffectKeeper(0, 0,
false);
26 initNerve(&NrvChipBase::ChipBaseNrvWait::sInstance);
28 if (MR::isValidInfo(rIter)) {
29 MR::setGroupClipping(
this, rIter, 0x20);
33 bool uses = MR::useStageSwitchReadAppear(
this, rIter);
35 MR::syncStageSwitchAppear(
this);
45 initModelManagerWithAnm(mChipName, 0,
false);
46 MR::connectToSceneNoSilhouettedMapObjStrongLight(
this);
48 if (ChipBase::isNeedBubble(rIter)) {
49 mAirBubble = MR::createPartsModelNoSilhouettedMapObj(
this,
"アワ",
"AirBubble", 0);
50 mAirBubble->initFixedPosition(TVec3f(0.0f, 0.0f, 0.0f), TVec3f(0.0f, 0.0f, 0.0f), 0);
51 MR::startBck(mAirBubble,
"Move", 0);
55void ChipBase::initSensor() {
67 TVec3f sensor(0.0f, 0.0f, 0.0f);
68 MR::addHitSensorEnemy(
this,
"body", 8, radius * scale_x, sensor);
73 if (MR::isValidInfo(rIter)) {
74 MR::getJMapInfoArg2WithInit(rIter, &_B5);
81 if (MR::isValidInfo(rIter)) {
82 MR::getJMapInfoArg5NoInit(rIter, &shadowShape);
85 if (shadowShape == 0) {
86 MR::initShadowVolumeCylinder(
this, 50.0f *
mScale.x);
90 MR::initShadowVolumeSphere(
this, 50.0f *
mScale.x);
93 f32 dropLength = 2000.0f;
94 if (MR::isValidInfo(rIter)) {
95 MR::getJMapInfoArg4NoInit(rIter, &dropLength);
97 MR::setShadowDropLength(
this, 0, dropLength);
99 if (mRailMover || _B5) {
100 MR::onCalcShadowDropPrivateGravity(
this, 0);
103 MR::onCalcShadowOneTime(
this, 0);
104 MR::onCalcShadowDropPrivateGravityOneTime(
this, 0);
109void ChipBase::initJMapParam(
const JMapInfoIter &rIter) {
110 if (MR::isValidInfo(rIter)) {
111 MR::initDefaultPos(
this, rIter);
112 MR::getJMapInfoArg0NoInit(rIter, &mGroupID);
114 if (MR::isConnectedWithRail(rIter)) {
115 initRailRider(rIter);
117 mRailMover->
init(rIter);
122void ChipBase::initAfterPlacement() {
123 MR::registerChip(mChipType,
this, mGroupID);
124 MR::setClippingRangeIncludeShadow(
this, &mClippingRange, 100.0f);
127void ChipBase::deactive() {
129 setNerve(&NrvChipBase::ChipBaseNrvDeactive::sInstance);
132void ChipBase::setGroupID(s32
id) {
136void ChipBase::setHost(
LiveActor *pActor) {
140void ChipBase::makeActorAppeared() {
141 if (!isNerve(&NrvChipBase::ChipBaseNrvDeactive::sInstance)) {
142 LiveActor::makeActorAppeared();
149void ChipBase::makeActorDead() {
154 LiveActor::makeActorDead();
157void ChipBase::control() {
159 mRailMover->movement();
163 MR::setClippingRangeIncludeShadow(
this, &mClippingRange, 100.0f);
167void ChipBase::appearWait() {
168 if (!isNerve(&NrvChipBase::ChipBaseNrvDeactive::sInstance)) {
170 MR::validateClipping(
this);
171 setNerve(&NrvChipBase::ChipBaseNrvWait::sInstance);
175void ChipBase::appearFlashing(s32 a1) {
176 if (!isNerve(&NrvChipBase::ChipBaseNrvDeactive::sInstance)) {
178 MR::invalidateClipping(
this);
179 mFlashingCtrl->start(a1);
180 setNerve(&NrvChipBase::ChipBaseNrvFlashing::sInstance);
186 MR::noticeGetChip(mChipType,
this, mGroupID);
187 setNerve(&NrvChipBase::ChipBaseNrvGot::sInstance);
190 mHost->receiveMessage(0x87, a1, a2);
199bool ChipBase::requestShow() {
200 if (isNerve(&NrvChipBase::ChipBaseNrvHide::sInstance)) {
201 MR::startBck(
this,
"Wait", 0);
203 setNerve(&NrvChipBase::ChipBaseNrvWait::sInstance);
210bool ChipBase::requestHide() {
212 MR::invalidateHitSensors(
this);
215 MR::forceDeleteEffectAll(
this);
216 setNerve(&NrvChipBase::ChipBaseNrvHide::sInstance);
223bool ChipBase::requestStartControl() {
224 if (isNerve(&NrvChipBase::ChipBaseNrvWait::sInstance)) {
225 setNerve(&NrvChipBase::ChipBaseNrvControled::sInstance);
232bool ChipBase::requestEndControl() {
233 if (isNerve(&NrvChipBase::ChipBaseNrvControled::sInstance)) {
234 setNerve(&NrvChipBase::ChipBaseNrvWait::sInstance);
241void ChipBase::exeFlashing() {
242 if (MR::isFirstStep(
this)) {
243 MR::startBck(
this,
"Wait", 0);
244 MR::validateHitSensors(
this);
247 if (mFlashingCtrl->mIsEnded) {
254void ChipBase::exeGot() {
255 if (MR::isFirstStep(
this)) {
258 MR::emitEffect(mdl,
"RecoveryBubbleBreak");
259 MR::incPlayerOxygen(8);
263 MR::emitEffect(
this,
"Get");
264 MR::tryRumblePadMiddle(
this, 0);
267 MR::startSystemSE(
"SE_SY_BLUECHIP_GET", MR::getGotChipCount(mChipType, mGroupID), -1);
270 if (mChipType == 1) {
271 MR::startSystemSE(
"SE_SY_YELLOWCHIP_GET", MR::getGotChipCount(mChipType, mGroupID), -1);
280bool ChipBase::isGettable()
const {
281 if (MR::isDead(
this)) {
287 if (MR::isLessStep(
this, 0x28)) {
292 if (isNerve(&NrvChipBase::ChipBaseNrvWait::sInstance) || isNerve(&NrvChipBase::ChipBaseNrvFlashing::sInstance)) {
301 if (!MR::isValidInfo(rIter)) {
306 MR::getJMapInfoArg3WithInit(rIter, &val);
311 if (ChipBase::isNeedBubble(rIter)) {
312 pList->addArchive(
"AirBubble");
316namespace NrvChipBase {
317 ChipBaseNrvDeactive ChipBaseNrvDeactive::sInstance;
318 ChipBaseNrvWait ChipBaseNrvWait::sInstance;
319 ChipBaseNrvControled ChipBaseNrvControled::sInstance;
320 ChipBaseNrvFlashing ChipBaseNrvFlashing::sInstance;
321 ChipBaseNrvHide ChipBaseNrvHide::sInstance;
322 ChipBaseNrvGot ChipBaseNrvGot::sInstance;
324 void ChipBaseNrvGot::execute(
Spine *pSpine)
const {
329 void ChipBaseNrvHide::execute(
Spine *pSpine)
const {
333 void ChipBaseNrvFlashing::execute(
Spine *pSpine)
const {
338 void ChipBaseNrvControled::execute(
Spine *pSpine)
const {
340 MR::zeroVelocity(base);
343 void ChipBaseNrvWait::execute(
Spine *pSpine)
const {
346 if (MR::isFirstStep(base)) {
347 MR::startBck(base,
"Wait", 0);
348 MR::validateHitSensors(base);
352 void ChipBaseNrvDeactive::execute(
Spine *pSpine)
const {
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.
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
Stores archive names of NameObjs.