1#pragma once
2
3#include <math/seadMatrix.h>
4
5#include "Library/Area/IUseAreaObj.h"
6#include "Library/Audio/IUseAudioKeeper.h"
7#include "Library/Camera/IUseCamera.h"
8#include "Library/Collision/IUseCollision.h"
9#include "Library/Effect/IUseEffectKeeper.h"
10#include "Library/HostIO/HioNode.h"
11#include "Library/Nature/NatureDirector.h"
12#include "Library/Nerve/IUseNerve.h"
13#include "Library/Rail/IUseRail.h"
14#include "Library/Scene/IUseSceneObjHolder.h"
15#include "Library/Stage/IUseStageSwitch.h"
16
17namespace al {
18class ActorPoseKeeperBase;
19class ActorExecuteInfo;
20class ActorActionKeeper;
21class ActorItemKeeper;
22class ActorScoreKeeper;
23class Collider;
24class CollisionParts;
25class ModelKeeper;
26class NerveKeeper;
27class HitSensorKeeper;
28class ScreenPointKeeper;
29class EffectKeeper;
30class AudioKeeper;
31class HitReactionKeeper;
32class StageSwitchKeeper;
33class RailKeeper;
34class ShadowKeeper;
35class ActorPrePassLightKeeper;
36class ActorOcclusionKeeper;
37class SubActorKeeper;
38class ActorParamHolder;
39struct ActorSceneInfo;
40struct LiveActorFlag;
41struct ActorInitInfo;
42class HitSensor;
43class SensorMsg;
44class ScreenPointer;
45class ScreenPointTarget;
46
47class LiveActor : public IUseNerve,
48 public IUseEffectKeeper,
49 public IUseAudioKeeper,
50 public IUseStageSwitch,
51 public IUseSceneObjHolder,
52 public IUseAreaObj,
53 public IUseCamera,
54 public IUseCollision,
55 public IUseRail,
56 public IUseHioNode {
57public:
58 LiveActor(const char* actorName);
59
60 NerveKeeper* getNerveKeeper() const override { return mNerveKeeper; }
61
62 virtual void init(const ActorInitInfo& info) {}
63
64 virtual void initAfterPlacement();
65 virtual void appear();
66 virtual void makeActorAlive();
67 virtual void kill();
68 virtual void makeActorDead();
69 virtual void movement();
70 virtual void calcAnim();
71 virtual void draw() const;
72 virtual void startClipped();
73 virtual void endClipped();
74
75 virtual void attackSensor(HitSensor* self, HitSensor* other) {}
76
77 virtual bool receiveMsg(const SensorMsg* message, HitSensor* other, HitSensor* self) {
78 return false;
79 }
80
81 virtual bool receiveMsgScreenPoint(const SensorMsg* message, ScreenPointer* source,
82 ScreenPointTarget* target) {
83 return false;
84 }
85
86 virtual const char* getName() const override { return mName; }
87
88 virtual const sead::Matrix34f* getBaseMtx() const;
89
90 virtual EffectKeeper* getEffectKeeper() const override { return mEffectKeeper; }
91
92 virtual AudioKeeper* getAudioKeeper() const override { return mAudioKeeper; }
93
94 virtual StageSwitchKeeper* getStageSwitchKeeper() const override { return mStageSwitchKeeper; }
95
96 virtual RailRider* getRailRider() const override;
97 virtual SceneObjHolder* getSceneObjHolder() const override;
98 virtual CollisionDirector* getCollisionDirector() const override;
99 virtual AreaObjDirector* getAreaObjDirector() const override;
100 virtual CameraDirector* getCameraDirector() const override;
101 NatureDirector* getNatureDirector() const;
102 virtual void initStageSwitchKeeper() override;
103
104 virtual void control() {}
105
106 virtual void updateCollider();
107
108 ActorSceneInfo* getSceneInfo() const;
109 void initPoseKeeper(ActorPoseKeeperBase* poseKeeper);
110 void initExecuteInfo(ActorExecuteInfo* executeInfo);
111 void initModelKeeper(ModelKeeper* modelKeeper);
112 void initActionKeeper(ActorActionKeeper* actionKeeper);
113 void initNerveKeeper(NerveKeeper* nerveKeeper);
114 void initHitSensor(s32 amount);
115 void initScreenPointKeeper(ScreenPointKeeper* screenPointKeeper);
116 void initEffectKeeper(EffectKeeper* effectKeeper);
117 void initAudioKeeper(AudioKeeper* audioKeeper);
118 void initRailKeeper(const ActorInitInfo& info, const char* linkName);
119 void initCollider(f32 radius, f32 offsetY, u32 allocatedHitInfo);
120 void initItemKeeper(s32 itemAmount);
121 void initScoreKeeper();
122 void initActorPrePassLightKeeper(ActorPrePassLightKeeper* lightKeeper);
123 void initActorOcclusionKeeper(ActorOcclusionKeeper* occlusionKeeper);
124 void initSubActorKeeper(SubActorKeeper* subActorKeeper);
125 void initSceneInfo(ActorSceneInfo* sceneInfo);
126
127 LiveActorFlag* getFlags() const { return mFlags; }
128
129 ModelKeeper* getModelKeeper() const { return mModelKeeper; }
130
131 ActorPoseKeeperBase* getPoseKeeper() const { return mPoseKeeper; }
132
133 ActorExecuteInfo* getExecuteInfo() const { return mExecuteInfo; }
134
135 ActorActionKeeper* getActorActionKeeper() const { return mActionKeeper; }
136
137 ActorItemKeeper* getActorItemKeeper() const { return mItemKeeper; }
138
139 ActorScoreKeeper* getActorScoreKeeper() const { return mScoreKeeper; }
140
141 Collider* getCollider() const { return mCollider; }
142
143 CollisionParts* getCollisionParts() const { return mCollisionParts; }
144
145 HitSensorKeeper* getHitSensorKeeper() const { return mHitSensorKeeper; }
146
147 ScreenPointKeeper* getScreenPointKeeper() const { return mScreenPointKeeper; }
148
149 HitReactionKeeper* getHitReactionKeeper() const { return mHitReactionKeeper; }
150
151 RailKeeper* getRailKeeper() const { return mRailKeeper; }
152
153 ShadowKeeper* getShadowKeeper() const { return mShadowKeeper; }
154
155 ActorPrePassLightKeeper* getActorPrePassLightKeeper() const { return mPrePassLightKeeper; }
156
157 ActorOcclusionKeeper* getActorOcclusionKeeper() const { return mOcclusionKeeper; }
158
159 SubActorKeeper* getSubActorKeeper() const { return mSubActorKeeper; }
160
161 ActorParamHolder* getActorParamHolder() const { return mParamHolder; }
162
163 void setName(const char* newName) { mName = newName; }
164
165protected:
166 friend class alActorFunction;
167
168private:
169 const char* mName = nullptr;
170 ActorPoseKeeperBase* mPoseKeeper = nullptr;
171 ActorExecuteInfo* mExecuteInfo = nullptr;
172 ActorActionKeeper* mActionKeeper = nullptr;
173 ActorItemKeeper* mItemKeeper = nullptr;
174 ActorScoreKeeper* mScoreKeeper = nullptr;
175 Collider* mCollider = nullptr;
176 CollisionParts* mCollisionParts = nullptr;
177 ModelKeeper* mModelKeeper = nullptr;
178 NerveKeeper* mNerveKeeper = nullptr;
179 HitSensorKeeper* mHitSensorKeeper = nullptr;
180 ScreenPointKeeper* mScreenPointKeeper = nullptr;
181 EffectKeeper* mEffectKeeper = nullptr;
182 AudioKeeper* mAudioKeeper = nullptr;
183 HitReactionKeeper* mHitReactionKeeper = nullptr;
184 StageSwitchKeeper* mStageSwitchKeeper = nullptr;
185 RailKeeper* mRailKeeper = nullptr;
186 ShadowKeeper* mShadowKeeper = nullptr;
187 ActorPrePassLightKeeper* mPrePassLightKeeper = nullptr;
188 ActorOcclusionKeeper* mOcclusionKeeper = nullptr;
189 SubActorKeeper* mSubActorKeeper = nullptr;
190 ActorParamHolder* mParamHolder = nullptr;
191 ActorSceneInfo* mSceneInfo = nullptr;
192 LiveActorFlag* mFlags = nullptr;
193};
194} // namespace al
195