1#include "Library/Obj/EffectObjInterval.h"
2
3#include "Library/Collision/PartsConnector.h"
4#include "Library/Effect/EffectKeeper.h"
5#include "Library/Effect/EffectSystemInfo.h"
6#include "Library/LiveActor/ActorInitUtil.h"
7#include "Library/LiveActor/ActorPoseUtil.h"
8#include "Library/Obj/EffectObjFunction.h"
9#include "Library/Placement/PlacementFunction.h"
10#include "Library/Se/SeFunction.h"
11#include "Library/Stage/StageSwitchUtil.h"
12#include "Library/Thread/FunctorV0M.h"
13
14namespace al {
15EffectObjInterval::EffectObjInterval(const char* name) : LiveActor(name) {}
16
17void EffectObjInterval::init(const ActorInitInfo& info) {
18 using EffectObjIntervalFunctor = FunctorV0M<EffectObjInterval*, void (EffectObjInterval::*)()>;
19
20 EffectObjFunction::initActorEffectObj(actor: this, info);
21 trySyncStageSwitchAppear(actor: this);
22 tryListenStageSwitchKill(actor: this);
23
24 listenStageSwitchOnOff(user: this, eventName: "OnKillOffAppearSwitch",
25 actionOn: EffectObjIntervalFunctor(this, &EffectObjInterval::kill),
26 actionOff: EffectObjIntervalFunctor(this, &EffectObjInterval::appear));
27
28 mMtxConnector = tryCreateMtxConnector(actor: this, info);
29
30 tryGetArg(arg: &mEmitInterval, initInfo: info, key: "EmitInterval");
31 if (tryGetArg(arg: &mFirstEmitFrame, initInfo: info, key: "FirstEmitFrame"))
32 mTimer = mFirstEmitFrame;
33 else
34 mTimer = 0;
35}
36
37void EffectObjInterval::initAfterPlacement() {
38 if (mMtxConnector == nullptr)
39 return;
40
41 attachMtxConnectorToCollision(mtxConnector: mMtxConnector, actor: this, false);
42}
43
44void EffectObjInterval::control() {
45 if (mMtxConnector != nullptr)
46 connectPoseQT(actor: this, mtxConnector: mMtxConnector);
47
48 makeMtxRT(mtx: &mBaseMtx, actor: this);
49
50 if (mTimer <= 0) {
51 mIsStarted = false;
52 emitEffect(this, "Wait", nullptr);
53 alEffectFunction::emitEffectIfExist(effectKeeperHolder: this, effectName: "Wait2", pos: nullptr);
54 tryStartSe(this, "Wait");
55 mIsStarted = true;
56
57 mTimer = mEmitInterval;
58
59 return;
60 }
61
62 mTimer--;
63}
64
65void EffectObjInterval::appear() {
66 mIsStarted = false;
67
68 LiveActor::appear();
69}
70
71void EffectObjInterval::kill() {
72 mIsStarted = false;
73
74 LiveActor::kill();
75}
76} // namespace al
77