1#include "Boss/BarrierField.h"
2
3#include "Library/Effect/EffectSystemInfo.h"
4#include "Library/LiveActor/ActorActionFunction.h"
5#include "Library/LiveActor/ActorClippingFunction.h"
6#include "Library/LiveActor/ActorInitUtil.h"
7#include "Library/Nerve/NerveSetupUtil.h"
8#include "Library/Placement/PlacementFunction.h"
9#include "Library/Stage/StageSwitchUtil.h"
10
11#include "System/GameDataFunction.h"
12#include "Util/DemoUtil.h"
13
14namespace {
15NERVE_ACTION_IMPL(BarrierField, Appear);
16NERVE_ACTION_IMPL(BarrierField, AppearBreedaMoonWorld);
17NERVE_ACTION_IMPL(BarrierField, Hide);
18NERVE_ACTION_IMPL(BarrierField, Disappear);
19
20NERVE_ACTIONS_MAKE_STRUCT(BarrierField, Appear, AppearBreedaMoonWorld, Hide, Disappear);
21
22} // namespace
23
24BarrierField::BarrierField(const char* name) : al::LiveActor(name) {}
25
26void BarrierField::init(const al::ActorInitInfo& initInfo) {
27 al::initNerveAction(actor: this, actionName: "Hide", collector: &NrvBarrierField.collector, maxStates: 0);
28 al::initMapPartsActor(actor: this, initInfo, suffix: nullptr);
29 al::tryGetArg(arg: &mIsDisappearByShineGet, initInfo, key: "IsDisappearByShineGet");
30 if (al::isObjectName(initInfo, name: "WaterfallWorldHomeBarrier") &&
31 GameDataFunction::isWorldMoon(accessor: this))
32 mIsMoon = true;
33 al::trySyncStageSwitchAppearAndKill(actor: this);
34}
35
36void BarrierField::appear() {
37 LiveActor::appear();
38
39 if (mIsMoon)
40 al::startNerveAction(actor: this, actionName: "AppearBreedaMoonWorld");
41 else
42 al::startNerveAction(actor: this, actionName: "Appear");
43
44 al::tryOnStageSwitch(user: this, linkName: "SwitchExistOnOff");
45 al::invalidateClipping(actor: this);
46 if (mIsDisappearByShineGet)
47 rs::setBossBarrierField(this);
48}
49
50void BarrierField::kill() {
51 al::tryOffStageSwitch(user: this, linkName: "SwitchExistOnOff");
52 al::validateClipping(actor: this);
53 al::LiveActor::kill();
54}
55
56void BarrierField::disappearByShineGet() {
57 if (getEffectKeeper())
58 al::tryKillEmitterAndParticleAll(this);
59 kill();
60}
61
62void BarrierField::exeAppear() {}
63
64void BarrierField::exeAppearBreedaMoonWorld() {}
65
66void BarrierField::exeHide() {}
67
68void BarrierField::exeDisappear() {
69 kill();
70}
71