| 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 | |
| 12 | namespace al { |
| 13 | class AudioDirector; |
| 14 | class StageResourceKeeper; |
| 15 | class LiveActorKit; |
| 16 | class LayoutKit; |
| 17 | class SceneMsgCtrl; |
| 18 | class SceneStopCtrl; |
| 19 | class ScreenCoverCtrl; |
| 20 | struct GraphicsInitArg; |
| 21 | struct DrawSystemInfo; |
| 22 | |
| 23 | class Scene : public NerveExecutor, |
| 24 | public IUseAudioKeeper, |
| 25 | public IUseCamera, |
| 26 | public IUseSceneObjHolder { |
| 27 | public: |
| 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 | |
| 87 | private: |
| 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 | |