1#pragma once
2
3#include <basis/seadTypes.h>
4
5#include "Library/HostIO/HioNode.h"
6
7namespace agl {
8class DrawContext;
9}
10
11namespace al {
12class ActorResourceHolder;
13class AreaObjDirector;
14class CameraDirector;
15class ClippingDirector;
16class CollisionDirector;
17class DemoDirector;
18class EffectSystem;
19class ExecuteAsyncExecutorUpdate;
20class ExecuteDirector;
21class GamePadSystem;
22struct GraphicsInitArg;
23class GraphicsSystemInfo;
24class GravityHolder;
25class HitSensorDirector;
26class ItemDirectorBase;
27class LiveActorGroup;
28class ModelDisplayListController;
29class ModelDrawBufferUpdater;
30class ModelGroup;
31class NatureDirector;
32class PadRumbleDirector;
33class PlayerHolder;
34class ScreenPointDirector;
35class ShadowDirector;
36class StageSwitchDirector;
37class SwitchAreaDirector;
38
39struct ModelDrawBufferCounter {
40 s32 maxDrawBuffer = 3;
41 s32 currentDrawBuffer = 0;
42};
43
44class LiveActorKit : public HioNode {
45public:
46 LiveActorKit(s32 maxActors, s32 maxPlayers);
47 virtual ~LiveActorKit();
48
49 void init(s32 maxCameras);
50 void initGraphics(const GraphicsInitArg& graphics);
51 void initHitSensorDirector();
52 void initGravityHolder();
53 void initShadowDirector();
54 void initEffectSystem();
55 void initSwitchAreaDirector(s32, s32);
56 void initNatureDirector();
57 void endInit();
58 void update(const char*);
59 void clearGraphicsRequest();
60 void updateGraphics();
61 void preDrawGraphics();
62
63 ActorResourceHolder* getActorResourceHolder() const { return mActorResourceHolder; }
64
65 AreaObjDirector* getAreaObjDirector() const { return mAreaObjDirector; }
66
67 ExecuteDirector* getExecuteDirector() const { return mExecuteDirector; }
68
69 GravityHolder* getGravityHolder() const { return mGravityHolder; }
70
71 EffectSystem* getEffectSystem() const { return mEffectSystem; }
72
73 GraphicsSystemInfo* getGraphicsSystemInfo() const { return mGraphicsSystemInfo; }
74
75 ModelDrawBufferCounter* getModelDrawBufferCounter() const { return mModelDrawBufferCounter; }
76
77 ModelDrawBufferUpdater* getModelDrawBufferUpdater() const { return mModelDrawBufferUpdater; }
78
79 ExecuteAsyncExecutorUpdate* getExecutorCore1() const { return mExecutorCore1; }
80
81 ExecuteAsyncExecutorUpdate* getExecutorCore2() const { return mExecutorCore2; }
82
83 ModelDisplayListController* getModelDisplayListController() const {
84 return mModelDisplayListController;
85 }
86
87 agl::DrawContext* getSceneDrawContext() const { return mSceneDrawContext; }
88
89 LiveActorGroup* getDynamicDrawActorGroup() const { return mDynamicDrawActorGroup; }
90
91 CameraDirector* getCameraDirector() const { return mCameraDirector; }
92
93 ClippingDirector* getClippingDirector() const { return mClippingDirector; }
94
95 CollisionDirector* getCollisionDirector() const { return mCollisionDirector; }
96
97 ItemDirectorBase* getItemDirector() const { return mItemDirector; }
98
99 PlayerHolder* getPlayerHolder() const { return mPlayerHolder; }
100
101 HitSensorDirector* getHitSensorDirector() const { return mHitSensorDirector; }
102
103 ScreenPointDirector* getScreenPointDirector() const { return mScreenPointDirector; }
104
105 ShadowDirector* getShadowDirector() const { return mShadowDirector; }
106
107 StageSwitchDirector* getStageSwitchDirector() const { return mStageSwitchDirector; }
108
109 SwitchAreaDirector* getSwitchAreaDirector() const { return mSwitchAreaDirector; }
110
111 LiveActorGroup* getLiveActorGroupAllActors() const { return mLiveActorGroupAllActors; }
112
113 DemoDirector* getDemoDirector() const { return mDemoDirector; }
114
115 GamePadSystem* getGamePadSystem() const { return mGamePadSystem; }
116
117 PadRumbleDirector* getPadRumbleDirector() const { return mPadRumbleDirector; }
118
119 NatureDirector* getNatureDirector() const { return mNatureDirector; }
120
121 ModelGroup* getModelGroup() const { return mModelGroup; }
122
123 void setItemDirector(ItemDirectorBase* itemDirector) { mItemDirector = itemDirector; }
124
125 void setDemoDirector(DemoDirector* demoDirector) { mDemoDirector = demoDirector; }
126
127 void setSceneDrawContext(agl::DrawContext* drawContext) { mSceneDrawContext = drawContext; }
128
129 void setGamePadSystem(GamePadSystem* gamePadSystem) { mGamePadSystem = gamePadSystem; }
130
131 void setEffectSystem(EffectSystem* effectSystem) { mEffectSystem = effectSystem; }
132
133private:
134 s32 mMaxActors;
135 ActorResourceHolder* mActorResourceHolder = nullptr;
136 AreaObjDirector* mAreaObjDirector = nullptr;
137 ExecuteDirector* mExecuteDirector = nullptr;
138 GravityHolder* mGravityHolder = nullptr;
139 EffectSystem* mEffectSystem = nullptr;
140 GraphicsSystemInfo* mGraphicsSystemInfo = nullptr;
141 ModelDrawBufferCounter* mModelDrawBufferCounter = nullptr;
142 ModelDrawBufferUpdater* mModelDrawBufferUpdater = nullptr;
143 ExecuteAsyncExecutorUpdate* mExecutorCore1 = nullptr;
144 ExecuteAsyncExecutorUpdate* mExecutorCore2 = nullptr;
145 ModelDisplayListController* mModelDisplayListController = nullptr;
146 agl::DrawContext* mSceneDrawContext = nullptr;
147 LiveActorGroup* mDynamicDrawActorGroup = nullptr;
148 CameraDirector* mCameraDirector = nullptr;
149 ClippingDirector* mClippingDirector = nullptr;
150 CollisionDirector* mCollisionDirector = nullptr;
151 ItemDirectorBase* mItemDirector = nullptr;
152 PlayerHolder* mPlayerHolder = nullptr;
153 HitSensorDirector* mHitSensorDirector = nullptr;
154 ScreenPointDirector* mScreenPointDirector = nullptr;
155 ShadowDirector* mShadowDirector = nullptr;
156 StageSwitchDirector* mStageSwitchDirector = nullptr;
157 SwitchAreaDirector* mSwitchAreaDirector = nullptr;
158 LiveActorGroup* mLiveActorGroupAllActors = nullptr;
159 DemoDirector* mDemoDirector = nullptr;
160 GamePadSystem* mGamePadSystem = nullptr;
161 PadRumbleDirector* mPadRumbleDirector = nullptr;
162 NatureDirector* mNatureDirector = nullptr;
163 ModelGroup* mModelGroup = nullptr;
164};
165
166} // namespace al
167