| 1 | #pragma once |
| 2 | |
| 3 | #include <math/seadMatrix.h> |
| 4 | |
| 5 | #include "Library/Execute/IUseExecutor.h" |
| 6 | #include "Library/HostIO/HioNode.h" |
| 7 | |
| 8 | namespace al { |
| 9 | class AreaObjDirector; |
| 10 | class CameraAngleVerticalRequester; |
| 11 | class CameraInputHolder; |
| 12 | class CameraInSwitchOnAreaDirector; |
| 13 | class CameraParamTransfer; |
| 14 | class CameraPoser; |
| 15 | class CameraPoserFactory; |
| 16 | class CameraPoseUpdater; |
| 17 | class CameraRailHolder; |
| 18 | class CameraResourceHolder; |
| 19 | class CameraStartParamCtrl; |
| 20 | class CameraStopJudge; |
| 21 | class CameraTargetCollideInfoHolder; |
| 22 | class CameraTargetHolder; |
| 23 | class CameraTicket; |
| 24 | class CameraTicketHolder; |
| 25 | class ICameraInput; |
| 26 | class IUseAudioKeeper; |
| 27 | class NameToCameraParamTransferFunc; |
| 28 | class PauseCameraCtrl; |
| 29 | class PlacementId; |
| 30 | class PlayerHolder; |
| 31 | class SceneCameraCtrl; |
| 32 | class SceneCameraInfo; |
| 33 | class SpecialCameraHolder; |
| 34 | struct CameraFlagCtrl; |
| 35 | struct CameraPoserSceneInfo; |
| 36 | |
| 37 | class CameraDirector : public HioNode, public IUseExecutor { |
| 38 | public: |
| 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 | |
| 88 | private: |
| 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 | |
| 111 | static_assert(sizeof(CameraDirector) == 0xA8); |
| 112 | |
| 113 | } // namespace al |
| 114 | |