1#pragma once
2
3#include "Library/LiveActor/LiveActor.h"
4
5namespace al {
6class KeyPoseKeeper;
7class SwitchKeepOnAreaGroup;
8class SwitchOnAreaGroup;
9class RippleCtrl;
10class FunctorBase;
11
12class KeyMoveMapParts : public LiveActor {
13public:
14 KeyMoveMapParts(const char* name);
15
16 void init(const ActorInitInfo& info) override;
17 void start();
18 void stop();
19 void appearAndSetStart();
20 bool receiveMsg(const SensorMsg* message, HitSensor* other, HitSensor* self) override;
21 void control() override;
22 void appearAndSetEnd();
23
24 virtual void exeStandBy();
25 void exeDelay();
26 virtual void exeWait();
27 void setWaitEndNerve();
28 void exeMoveSign();
29 virtual void exeMove();
30 void exeStopSign();
31 void exeStop();
32
33 KeyPoseKeeper* getKeyPoseKeeper() const { return mKeyPoseKeeper; }
34
35 void setIsStopKill(bool isStopKill) { mIsStopKill = isStopKill; }
36
37private:
38 static const char* getSeNameByIndex(s32 index) {
39 switch (index) {
40 case 0:
41 return "PgMove0";
42 case 1:
43 return "PgMove1";
44 default:
45 return nullptr;
46 }
47 }
48
49 KeyPoseKeeper* mKeyPoseKeeper = nullptr;
50 SwitchKeepOnAreaGroup* mSwitchKeepOnAreaGroup = nullptr;
51 SwitchOnAreaGroup* mSwitchOnAreaGroup = nullptr;
52 RippleCtrl* mRippleCtrl = nullptr;
53 sead::Vector3f mClippingOffset = sead::Vector3f::zero;
54 s32 mKeyMoveWaitTime = 30;
55 s32 mKeyMoveMoveTime = 0;
56 s32 mDelayTime = 0;
57 bool mIsFloorTouchStart = false;
58 bool mIsHipDropStart = false;
59 bool mIsStopKill = false;
60 const char* mSeMoveName = nullptr;
61};
62
63static_assert(sizeof(KeyMoveMapParts) == 0x150);
64} // namespace al
65