1#pragma once
2
3#include <prim/seadSafeString.h>
4
5#include "Library/Audio/IUseAudioKeeper.h"
6#include "Library/Camera/IUseCamera.h"
7#include "Library/LiveActor/ActorInitInfo.h"
8#include "Library/Nerve/NerveExecutor.h"
9#include "Library/Scene/IUseSceneObjHolder.h"
10#include "Project/Scene/SceneInitInfo.h"
11
12namespace al {
13class AudioDirector;
14class StageResourceKeeper;
15class LiveActorKit;
16class LayoutKit;
17class SceneMsgCtrl;
18class SceneStopCtrl;
19class ScreenCoverCtrl;
20struct GraphicsInitArg;
21struct DrawSystemInfo;
22
23class Scene : public NerveExecutor,
24 public IUseAudioKeeper,
25 public IUseCamera,
26 public IUseSceneObjHolder {
27public:
28 Scene(const char*);
29
30 virtual ~Scene();
31
32 virtual void init(const SceneInitInfo& initInfo) {}
33
34 virtual void appear();
35 virtual void kill();
36 virtual void movement();
37
38 virtual void control() {}
39
40 virtual void drawMain() const {}
41
42 virtual void drawSub() const {}
43
44 AudioKeeper* getAudioKeeper() const override { return mAudioKeeper; }
45
46 void setAudioKeeper(AudioKeeper* audioKeeper) { mAudioKeeper = audioKeeper; }
47
48 SceneObjHolder* getSceneObjHolder() const override { return mSceneObjHolder; }
49
50 CameraDirector* getCameraDirector() const override;
51
52 void initializeAsync(const SceneInitInfo& initInfo);
53 void initDrawSystemInfo(const SceneInitInfo& initInfo);
54 void initSceneObjHolder(SceneObjHolder* sceneObjHolder);
55 void initAndLoadStageResource(const char* stageName, s32 scenarioNo);
56 void initLiveActorKit(const SceneInitInfo& initInfo, s32 maxActors, s32 maxPlayers,
57 s32 maxCameras);
58 void initLiveActorKitImpl(const SceneInitInfo& initInfo, s32 maxActors, s32 maxPlayers,
59 s32 maxCameras);
60 void initLiveActorKitWithGraphics(const GraphicsInitArg& graphicsInitArg,
61 const SceneInitInfo& initInfo, s32 maxActors, s32 maxPlayers,
62 s32 maxCameras);
63 void initLayoutKit(const SceneInitInfo& initInfo);
64 void initSceneStopCtrl();
65 void initSceneMsgCtrl();
66 void initScreenCoverCtrl();
67 void endInit(const ActorInitInfo& initInfo);
68
69 StageResourceKeeper* getStageResourceKeeper() const { return mStageResourceKeeper; }
70
71 LiveActorKit* getLiveActorKit() const { return mLiveActorKit; }
72
73 LayoutKit* getLayoutKit() const { return mLayoutKit; }
74
75 SceneStopCtrl* getSceneStopCtrl() const { return mSceneStopCtrl; }
76
77 SceneMsgCtrl* getSceneMsgCtrl() const { return mSceneMsgCtrl; }
78
79 ScreenCoverCtrl* getScreenCoverCtrl() const { return mScreenCoverCtrl; }
80
81 AudioDirector* getAudioDirector() const { return mAudioDirector; }
82
83 void setAudioDirector(AudioDirector* audioDirector) { mAudioDirector = audioDirector; }
84
85 DrawSystemInfo* getDrawSystemInfo() const { return mDrawSystemInfo; }
86
87private:
88 bool mIsAlive = false;
89 sead::FixedSafeString<0x40> mName;
90 StageResourceKeeper* mStageResourceKeeper = nullptr;
91 LiveActorKit* mLiveActorKit = nullptr;
92 LayoutKit* mLayoutKit = nullptr;
93 SceneObjHolder* mSceneObjHolder = nullptr;
94 SceneStopCtrl* mSceneStopCtrl = nullptr;
95 SceneMsgCtrl* mSceneMsgCtrl = nullptr;
96 ScreenCoverCtrl* mScreenCoverCtrl = nullptr;
97 AudioDirector* mAudioDirector = nullptr;
98 AudioKeeper* mAudioKeeper = nullptr;
99 DrawSystemInfo* mDrawSystemInfo = nullptr;
100};
101} // namespace al
102