1#include "MapObj/SphinxRideMiniGameObjGenerator.h"
2
3#include "Library/LiveActor/ActorInitUtil.h"
4#include "Library/LiveActor/ActorPoseUtil.h"
5#include "Library/Nerve/NerveSetupUtil.h"
6#include "Library/Nerve/NerveUtil.h"
7#include "Library/Placement/PlacementFunction.h"
8
9namespace {
10NERVE_IMPL(SphinxRideMiniGameObjGenerator, Wait)
11
12NERVES_MAKE_NOSTRUCT(SphinxRideMiniGameObjGenerator, Wait)
13} // namespace
14
15SphinxRideMiniGameObjGenerator::SphinxRideMiniGameObjGenerator(const char* name, f32 unused1,
16 f32 unused2)
17 : al::LiveActor("乗れるスフィンクスのミニゲームオブジェジェネレータ") {}
18
19void SphinxRideMiniGameObjGenerator::init(const al::ActorInitInfo& info) {
20 al::initActor(actor: this, initInfo: info);
21 al::initNerve(actor: this, nerve: &Wait, maxStates: 0);
22 al::tryGetArg(arg: &mIsAppearRandom, initInfo: info, key: "isAppearRandom");
23
24 s32 linkChildNum = al::calcLinkChildNum(initInfo: info, linkName: "CreateObj");
25
26 if (linkChildNum <= 0) {
27 makeActorDead();
28 return;
29 }
30
31 mActorArray.allocBuffer(ptrNumMax: linkChildNum, heap: nullptr, alignment: 8);
32 mTransArray = new sead::Vector3f[linkChildNum];
33
34 for (s32 i = 0; i != linkChildNum; i++) {
35 al::LiveActor* linksActor = al::createLinksActorFromFactory(initInfo: info, linkName: "CreateObj", linkNum: i);
36 mActorArray.pushBack(ptr: linksActor);
37 mTransArray[i] = al::getTrans(actor: linksActor);
38 }
39
40 makeActorDeadAllActor();
41 makeActorAlive();
42}
43
44void SphinxRideMiniGameObjGenerator::makeActorDeadAllActor() {
45 for (s32 i = 0; i < mActorArray.size(); i++)
46 mActorArray[i]->makeActorDead();
47}
48
49void SphinxRideMiniGameObjGenerator::exeWait() {
50 if (al::isStep(user: this, step: 60))
51 appearAllActor();
52}
53
54void SphinxRideMiniGameObjGenerator::appearAllActor() {
55 for (s32 i = 0; i < mActorArray.size(); i++) {
56 al::LiveActor* actor = mActorArray[i];
57 actor->appear();
58 if (!mIsAppearRandom)
59 al::setTrans(actor, trans: mTransArray[i]);
60 }
61}
62