1#pragma once
2
3#include <gfx/seadCamera.h>
4#include <math/seadMatrix.h>
5#include <math/seadVector.h>
6#include <nn/album/album_types.h>
7
8#include "Library/Nerve/NerveExecutor.h"
9
10namespace al {
11
12class CameraInterpole;
13class CameraParamTransfer;
14class CameraShaker;
15class CameraStartParamCtrl;
16class CameraStopJudge;
17class CameraSwitcher;
18class CameraTicket;
19class CameraViewFlag;
20class CameraViewInfo;
21class PauseCameraCtrl;
22class Projection;
23class SceneCameraInfo;
24
25class CameraPoseUpdater : public NerveExecutor {
26public:
27 CameraPoseUpdater(SceneCameraInfo*, s32 viewIdx);
28
29 void init(const CameraParamTransfer* paramTransfer, const CameraStopJudge* stopJudge,
30 const CameraStartParamCtrl* startParamCtrl);
31 void update();
32 bool trySwitchCamera();
33 bool isActiveInterpole() const;
34 void startInterpole(s32);
35
36 void setNearClipDistance(f32 distance) { mNearClipDistance = distance; }
37
38 void setFarClipDistance(f32 distance) { mFarClipDistance = distance; }
39
40 void setAspect(f32 aspect) { mAspect = aspect; }
41
42private:
43 nn::album::ImageOrientation mSnapShotOrientation;
44 SceneCameraInfo* mSceneCamInfo;
45 void* _20;
46 CameraViewInfo* mViewInfo;
47 CameraViewFlag* mViewFlag;
48 bool mIsMainView;
49 const s32 mViewIdx;
50 sead::LookAtCamera mLookAtCamera;
51 CameraTicket* mTicket;
52 Projection* mProjection;
53 sead::Vector2f _b0;
54 f32 mNearClipDistance;
55 f32 mFarClipDistance;
56 f32 mAspect;
57 f32 mFovyDegree;
58 CameraSwitcher* mSwitcher;
59 CameraStartParamCtrl* mStartParamCtrl;
60 CameraStopJudge* mStopJudge;
61 CameraParamTransfer* mParamTransfer;
62 PauseCameraCtrl* mCtrlPausePtr;
63 CameraInterpole* mInterpole;
64 CameraShaker* mShaker;
65};
66
67static_assert(sizeof(CameraPoseUpdater) == 0x100);
68
69} // namespace al
70