1#pragma once
2
3#include <math/seadMatrix.h>
4
5#include "Library/Execute/IUseExecutor.h"
6#include "Library/HostIO/HioNode.h"
7
8namespace al {
9class AreaObjDirector;
10class CameraAngleVerticalRequester;
11class CameraInputHolder;
12class CameraInSwitchOnAreaDirector;
13class CameraParamTransfer;
14class CameraPoser;
15class CameraPoserFactory;
16class CameraPoseUpdater;
17class CameraRailHolder;
18class CameraResourceHolder;
19class CameraStartParamCtrl;
20class CameraStopJudge;
21class CameraTargetCollideInfoHolder;
22class CameraTargetHolder;
23class CameraTicket;
24class CameraTicketHolder;
25class ICameraInput;
26class IUseAudioKeeper;
27class NameToCameraParamTransferFunc;
28class PauseCameraCtrl;
29class PlacementId;
30class PlayerHolder;
31class SceneCameraCtrl;
32class SceneCameraInfo;
33class SpecialCameraHolder;
34struct CameraFlagCtrl;
35struct CameraPoserSceneInfo;
36
37class CameraDirector : public HioNode, public IUseExecutor {
38public:
39 CameraDirector(s32 maxCameras);
40 virtual ~CameraDirector();
41
42 void init(CameraPoserSceneInfo*, const CameraPoserFactory*);
43 void initAreaCameraSwitcherMultiForPrototype(AreaObjDirector*);
44 void initAreaCameraSwitcherSingle();
45 void initResourceHolder(const CameraResourceHolder* resourceHolder);
46 void initSceneFovyDegree(f32 fov);
47 void initSettingCloudSea(f32);
48 void initSnapShotCameraAudioKeeper(IUseAudioKeeper* audioKeeper);
49 PauseCameraCtrl* initAndCreatePauseCameraCtrl(f32);
50
51 void execute() override;
52 void update();
53 void endInit(const PlayerHolder*);
54
55 CameraPoseUpdater* getPoseUpdater(s32 index);
56 CameraTicket* createCameraFromFactory(const char*, const PlacementId*, const char*, s32,
57 const sead::Matrix34f&);
58 CameraTicket* createCamera(CameraPoser*, const PlacementId*, const char*, s32,
59 const sead::Matrix34f&, bool);
60 CameraTicket* createObjectCamera(const PlacementId*, const char*, const char*, s32,
61 const sead::Matrix34f&);
62 CameraTicket* createObjectEntranceCamera(const PlacementId*, const char*,
63 const sead::Matrix34f&);
64 CameraTicket* createMirrorObjectCamera(const PlacementId*, const char*, s32,
65 const sead::Matrix34f&);
66
67 ICameraInput* getCameraInput();
68 void setCameraInput(const ICameraInput* input);
69 void setViewCameraInput(const ICameraInput* input, s32);
70 void registerCameraRailHolder(CameraRailHolder* railHolder);
71 void setCameraParamTransferFuncTable(const NameToCameraParamTransferFunc*, s32);
72 f32 getSceneFovyDegree();
73 void validateCameraArea2D();
74 void invalidateCameraArea2D();
75 void stopByDeathPlayer();
76 void restartByDeathPlayer();
77 void startInvalidStopJudgeByDemo();
78 void endInvalidStopJudgeByDemo();
79 void startSnapShotMode(bool);
80 void endSnapShotMode();
81
82 SceneCameraInfo* getSceneCameraInfo() const { return mSceneCameraInfo; }
83
84 SceneCameraCtrl* getSceneCameraCtrl() const { return mSceneCameraCtrl; }
85
86 CameraFlagCtrl* getFlagCtrl() const { return mFlagCtrl; }
87
88private:
89 s32 mCountCameraPoseUpdaters;
90 SceneCameraInfo* mSceneCameraInfo;
91 SceneCameraCtrl* mSceneCameraCtrl;
92 CameraPoseUpdater** mPoseUpdaters;
93 CameraPoserFactory* mPoserFactory;
94 CameraPoserSceneInfo* mPoserSceneInfo;
95 CameraTicketHolder* mTicketHolder;
96 SpecialCameraHolder* mSpecialCameraHolder;
97 CameraTargetCollideInfoHolder* mTargetCollideInfoHolder;
98 CameraTargetHolder* mTargetHolder;
99 CameraInputHolder* mInputHolder;
100 CameraAngleVerticalRequester* mAngleVerticalRequester;
101 CameraStartParamCtrl* mStartParamCtrl;
102 CameraStopJudge* mStopJudge;
103 CameraParamTransfer* mParamTransfer;
104 const CameraResourceHolder* mCameraResourceHolder;
105 CameraFlagCtrl* mFlagCtrl;
106 void* unk;
107 CameraInSwitchOnAreaDirector* mInSwitchOnAreaDirector;
108 void* unk2;
109};
110
111static_assert(sizeof(CameraDirector) == 0xA8);
112
113} // namespace al
114