1#pragma once
2
3#include <basis/seadTypes.h>
4#include <common/aglRenderBuffer.h>
5#include <gfx/seadCamera.h>
6#include <heap/seadHeap.h>
7
8namespace al {
9class ActorFactory;
10struct ActorInitInfo;
11class AudioDirector;
12class LayoutInitInfo;
13class GameDataHolderBase;
14class SceneMsgCtrl;
15class PlacementInfo;
16class Scene;
17struct SceneInitInfo;
18class StageInfo;
19class PauseCameraCtrl;
20struct AudioDirectorInitInfo;
21class Projection;
22class LiveActor;
23class LiveActorGroup;
24class AreaObjFactory;
25class DemoDirector;
26class ItemDirectorBase;
27class SwitchOnAreaGroup;
28class SwitchKeepOnAreaGroup;
29class CameraPoserFactory;
30class IUseAudioKeeper;
31class AreaObjDirector;
32class ExecuteDirector;
33class PlayerHolder;
34class ItemDirectorBase;
35class Resource;
36
37s32 getStageInfoMapNum(const Scene* scene);
38s32 getStageInfoDesignNum(const Scene* scene);
39s32 getStageInfoSoundNum(const Scene* scene);
40StageInfo* getStageInfoMap(const Scene* scene, s32 index);
41StageInfo* getStageInfoDesign(const Scene* scene, s32 index);
42StageInfo* getStageInfoSound(const Scene* scene, s32 index);
43Resource* getStageResourceMap(const Scene* scene, s32 index);
44Resource* tryGetStageResourceDesign(const Scene* scene, s32 index);
45Resource* tryGetStageResourceSound(const Scene* scene, s32 index);
46agl::RenderBuffer* getSceneFrameBufferMain(const Scene* scene);
47agl::DrawContext* getSceneDrawContext(const Scene* scene);
48agl::RenderBuffer* getSceneFrameBufferConsole(const Scene* scene);
49agl::RenderBuffer* getSceneFrameBufferHandheld(const Scene* scene);
50f32 getSceneFrameBufferMainAspect(const Scene* scene);
51bool isChangedGraphicsQualityMode(const Scene* scene);
52AreaObjDirector* getSceneAreaObjDirector(const Scene* scene);
53ExecuteDirector* getSceneExecuteDirector(const Scene* scene);
54PlayerHolder* getScenePlayerHolder(const Scene* scene);
55ItemDirectorBase* getSceneItemDirector(const Scene* scene);
56void initActorInitInfo(ActorInitInfo* actorInitInfo, const Scene* scene,
57 const PlacementInfo* placementInfo, const LayoutInitInfo* layoutInfo,
58 const ActorFactory* actorFactory, SceneMsgCtrl* sceneMsgCtrl,
59 GameDataHolderBase* gameDataHolderBase);
60void initLayoutInitInfo(LayoutInitInfo* layoutInfo, const Scene* scene,
61 const SceneInitInfo& sceneInfo);
62void initPlacementAreaObj(Scene* scene, const ActorInitInfo& actorInfo);
63void initPlacementGravityObj(Scene* scene);
64bool tryGetPlacementInfoAndCount(PlacementInfo* outPlacementInfo, s32* outCount,
65 const StageInfo* stageInfo, const char* key);
66void initPlacementObjectMap(Scene* scene, const ActorInitInfo& actorInfo, const char* name);
67void initPlacementByStageInfo(const StageInfo* stageInfo, const char* key,
68 const ActorInitInfo& actorInfo);
69void initPlacementObjectDesign(Scene* scene, const ActorInitInfo& actorInfo, const char* name);
70void initPlacementObjectSound(Scene* scene, const ActorInitInfo& actorInfo, const char* name);
71LiveActor* tryInitPlacementSingleObject(Scene* scene, const ActorInitInfo& actorInfo,
72 s32 resourceType, const char* key);
73LiveActor* tryInitPlacementSingleObject(Scene* scene, const ActorInitInfo& actorInfo,
74 s32 resourceType, const char* key, const char* name);
75bool tryInitPlacementActorGroup(LiveActorGroup* liveActorGroup, Scene* scene,
76 const ActorInitInfo& actorInfo, s32 resourceType, const char* key,
77 const char* name);
78void initPlacementByStageInfoSingle(const StageInfo* stageInfo, const char* key,
79 const ActorInitInfo& actorInfo);
80bool tryGetPlacementInfo(PlacementInfo* outPlacementInfo, const StageInfo* stageInfo,
81 const char* key);
82void getPlacementInfo(PlacementInfo* outPlacementInfo, const StageInfo* stageInfo, const char* key);
83void getPlacementInfoAndCount(PlacementInfo* outPlacementInfo, s32* outCount,
84 const StageInfo* stageInfo, const char* key);
85void initAreaObjDirector(Scene* scene, const AreaObjFactory* factory);
86void initDemoDirector(Scene* scene, DemoDirector* demoDirector);
87void initHitSensorDirector(Scene* scene);
88void initGravityHolder(Scene* scene);
89void initItemDirector(Scene* scene, ItemDirectorBase* itemDirector);
90void initNatureDirector(Scene* scene);
91void initSwitchAreaDirector(Scene* scene, s32 maxSwitchOnArea, s32 maxSwitchKeepOnArea);
92void registerSwitchOnAreaGroup(Scene* scene, SwitchOnAreaGroup* switchOnAreaGroup);
93void registerSwitchKeepOnAreaGroup(Scene* scene, SwitchKeepOnAreaGroup* switchKeepOnAreaGroup);
94void initGraphicsSystemInfo(Scene* scene, const char* name, s32 index);
95void initCameraDirector(Scene* scene, const CameraPoserFactory* cameraPoserFactory);
96void initCameraDirectorWithoutStageResource(Scene* scene,
97 const CameraPoserFactory* cameraPoserFactory);
98void initCameraDirectorFix(Scene* scene, const sead::Vector3f& pos, const sead::Vector3f& lookAtPos,
99 const CameraPoserFactory* cameraPoserFactory);
100void initSceneCameraFovyDegree(Scene* scene, f32 fovy);
101void initSnapShotCameraAudioKeeper(Scene* scene, IUseAudioKeeper* audioKeeper);
102void setCameraAspect(Scene* scene, f32 aspectA, f32 aspectB);
103void resetSceneInitEntranceCamera(Scene* scene);
104void stopCameraByDeathPlayer(Scene* scene);
105void restartCameraByDeathPlayer(Scene* scene);
106void startInvalidCameraStopJudgeByDemo(Scene* scene);
107void endInvalidCameraStopJudgeByDemo(Scene* scene);
108void startCameraSnapShotMode(Scene* scene, bool useInterpole);
109void endCameraSnapShotMode(Scene* scene);
110bool isCameraReverseInputH(const Scene* scene);
111void onCameraReverseInputH(Scene* scene);
112void offCameraReverseInputH(Scene* scene);
113bool isCameraReverseInputV(const Scene* scene);
114void onCameraReverseInputV(Scene* scene);
115void offCameraReverseInputV(Scene* scene);
116s32 getCameraStickSensitivityLevel(const Scene* scene);
117void setCameraStickSensitivityLevel(Scene* scene, s32 sensitivityLevel);
118bool isValidCameraGyro(const Scene* scene);
119void validateCameraGyro(Scene* scene);
120void invalidateCameraGyro(Scene* scene);
121s32 getCameraGyroSensitivityLevel(const Scene* scene);
122void setCameraGyroSensitivityLevel(Scene* scene, s32 sensitivityLevel);
123// TODO: rename parameter
124PauseCameraCtrl* initAndCreatePauseCameraCtrl(Scene* scene, f32 value);
125void startCameraPause(PauseCameraCtrl* pauseCameraCtrl);
126void endCameraPause(PauseCameraCtrl* pauseCameraCtrl);
127void initAudioDirector2D(Scene* scene, const SceneInitInfo& sceneInfo,
128 AudioDirectorInitInfo& audioDirectorInfo);
129void initAudioDirector3D(Scene* scene, const SceneInitInfo& sceneInfo,
130 AudioDirectorInitInfo& audioDirectorInfo);
131void initAudioDirector3D(Scene* scene, const SceneInitInfo& sceneInfo,
132 AudioDirectorInitInfo& audioDirectorInfo,
133 const sead::LookAtCamera* lookAtCamera, const Projection* projection,
134 AreaObjDirector* areaObjDirector);
135void initSceneAudioKeeper(Scene* scene, const SceneInitInfo& sceneInfo, const char* name);
136void setIsSafeFinalizingInParallelThread(Scene* scene, bool isSafe);
137void updateKit(Scene* scene);
138void updateKitTable(Scene* scene, const char* name);
139void updateKitList(Scene* scene, const char* listName, const char* name);
140void updateKitList(Scene* scene, const char* name);
141void updateLayoutKit(Scene* scene);
142void updateEffect(Scene* scene);
143void updateEffectSystem(Scene* scene);
144void updateEffectPlayer(Scene* scene);
145void updateEffectDemo(Scene* scene);
146void updateEffectDemoWithPause(Scene* scene);
147void updateEffectLayout(Scene* scene);
148void updateGraphicsPrev(Scene* scene);
149void updateKitListPrev(Scene* scene);
150void updateKitListPost(Scene* scene);
151void updateKitListPostDemoWithPauseNormalEffect(Scene* scene);
152void updateKitListPostOnNerveEnd(Scene* scene);
153void drawKit(const Scene* scene, const char* name);
154void drawKitList(const Scene* scene, const char* listName, const char* name);
155void drawLayoutKit(const Scene* scene, const char* name);
156void drawEffectDeferred(const Scene* scene, s32 index);
157// TODO: rename parameter
158void startForwardPlayerScreenFader(const Scene* scene, s32 a, s32 b, f32 c);
159// TODO: rename parameter
160void endForwardPlayerScreenFader(const Scene* scene, s32 a);
161bool isStopScene(const Scene* scene);
162void startCheckViewCtrlByCameraPos(Scene* scene);
163void startCheckViewCtrlByLookAtPos(Scene* scene);
164void startCheckViewCtrlByPlayerPos(Scene* scene);
165bool isExistScreenCoverCtrl(const Scene* scene);
166bool isRequestCaptureScreenCover(const Scene* scene);
167void resetRequestCaptureScreenCover(const Scene* scene);
168bool isOffDrawScreenCover(const Scene* scene);
169void resetCaptureScreenCover(const Scene* scene);
170void validatePostProcessingFilter(const Scene* scene);
171void invalidatePostProcessingFilter(const Scene* scene);
172void incrementPostProcessingFilterPreset(const Scene* scene);
173void decrementPostProcessingFilterPreset(const Scene* scene);
174s32 getPostProcessingFilterPresetId(const Scene* scene);
175bool isActiveDemo(const Scene* scene);
176const char* getActiveDemoName(const Scene* scene);
177LiveActor** getDemoActorList(const Scene* scene);
178s32 getDemoActorNum(const Scene* scene);
179void updateDemoActor(const Scene* scene);
180void updateDemoActorForPauseEffect(const Scene* scene);
181void stopAllSe(const Scene* scene, u32 index);
182void initPadRumble(const Scene* scene, const SceneInitInfo& sceneInfo);
183void stopPadRumble(const Scene* scene);
184void pausePadRumble(const Scene* scene);
185void endPausePadRumble(const Scene* scene);
186void validatePadRumble(Scene* scene);
187void invalidatePadRumble(Scene* scene);
188void setPadRumblePowerLevel(Scene* scene, s32 powerLevel);
189const Resource* getPreLoadFileListArc();
190bool tryRequestPreLoadFile(const Scene* scene, const SceneInitInfo& sceneInfo, s32 index,
191 sead::Heap* heap);
192} // namespace al
193
194namespace alSceneFunction {
195void initAreaCameraSwitcherMultiForPrototype(const al::Scene* scene);
196}
197