mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-27 02:54:08 +00:00
88 lines
2.8 KiB
C++
88 lines
2.8 KiB
C++
#include "Library/MapObj/KeyMoveMapPartsGenerator.h"
|
|
|
|
#include "Library/KeyPose/KeyPoseKeeperUtil.h"
|
|
#include "Library/LiveActor/ActorClippingFunction.h"
|
|
#include "Library/LiveActor/ActorInitFunction.h"
|
|
#include "Library/LiveActor/ActorInitUtil.h"
|
|
#include "Library/LiveActor/LiveActorGroup.h"
|
|
#include "Library/MapObj/KeyMoveMapParts.h"
|
|
#include "Library/Nerve/NerveSetupUtil.h"
|
|
#include "Library/Nerve/NerveUtil.h"
|
|
#include "Library/Placement/PlacementFunction.h"
|
|
|
|
namespace {
|
|
using namespace al;
|
|
|
|
NERVE_IMPL(KeyMoveMapPartsGenerator, Generate)
|
|
NERVE_IMPL(KeyMoveMapPartsGenerator, Delay)
|
|
|
|
NERVES_MAKE_STRUCT(KeyMoveMapPartsGenerator, Generate, Delay)
|
|
} // namespace
|
|
|
|
namespace al {
|
|
KeyMoveMapPartsGenerator::KeyMoveMapPartsGenerator(const char* name) : LiveActor(name) {}
|
|
|
|
void KeyMoveMapPartsGenerator::init(const ActorInitInfo& info) {
|
|
initActorSceneInfo(this, info);
|
|
initExecutorMapObjMovement(this, info);
|
|
initActorPoseTQSV(this);
|
|
|
|
s32 partsCount = 4;
|
|
tryGetArg(&partsCount, info, "PartsCount");
|
|
tryGetArg(&mGenerateInterval, info, "GenerateInterval");
|
|
tryGetArg(&mDelayTime, info, "DelayTime");
|
|
|
|
initSubActorKeeperNoFile(this, info, partsCount);
|
|
|
|
mKeyMoveMapPartsGroup =
|
|
new DeriveActorGroup<KeyMoveMapParts>("キー移動マップパーツリスト", partsCount);
|
|
|
|
if (calcLinkChildNum(info, "Generate") == 0) {
|
|
makeActorDead();
|
|
|
|
return;
|
|
}
|
|
|
|
for (s32 i = 0; i < partsCount; i++) {
|
|
KeyMoveMapParts* keyMoveMapParts = new KeyMoveMapParts("キー移動マップマップパーツ");
|
|
|
|
initLinksActor(keyMoveMapParts, info, "Generate", 0);
|
|
|
|
keyMoveMapParts->setIsStopKill(true);
|
|
keyMoveMapParts->makeActorDead();
|
|
|
|
mKeyMoveMapPartsGroup->registerActor(keyMoveMapParts);
|
|
}
|
|
|
|
KeyMoveMapParts* keyMoveMapParts = mKeyMoveMapPartsGroup->getDeriveActor(0);
|
|
f32 clippingRadius = 0.0f;
|
|
calcKeyMoveClippingInfo(&mClippingTrans, &clippingRadius, keyMoveMapParts->getKeyPoseKeeper(),
|
|
500.0f);
|
|
initActorClipping(this, info);
|
|
setClippingInfo(this, clippingRadius, &mClippingTrans);
|
|
initGroupClipping(this, info);
|
|
|
|
initNerve(this, &NrvKeyMoveMapPartsGenerator.Generate, 0);
|
|
if (mDelayTime > 0)
|
|
setNerve(this, &NrvKeyMoveMapPartsGenerator.Delay);
|
|
getNerveKeeper()->update();
|
|
|
|
initStageSwitch(this, info);
|
|
|
|
makeActorAlive();
|
|
}
|
|
|
|
void KeyMoveMapPartsGenerator::exeDelay() {
|
|
if (isGreaterEqualStep(this, mDelayTime - 1))
|
|
setNerve(this, &NrvKeyMoveMapPartsGenerator.Generate);
|
|
}
|
|
|
|
void KeyMoveMapPartsGenerator::exeGenerate() {
|
|
if (isIntervalStep(this, mGenerateInterval, 0)) {
|
|
KeyMoveMapParts* keyMoveMapParts = mKeyMoveMapPartsGroup->tryFindDeadDeriveActor();
|
|
if (keyMoveMapParts)
|
|
keyMoveMapParts->appearAndSetStart();
|
|
}
|
|
}
|
|
} // namespace al
|