1#pragma once
2
3#include <gfx/seadCamera.h>
4
5#include "Library/Audio/IUseAudioKeeper.h"
6#include "Library/Nerve/NerveExecutor.h"
7#include "Library/Yaml/ByamlIter.h"
8
9struct CameraParam {
10 bool hasMin;
11 bool hasMax;
12 f32 minFovyDegree;
13 f32 maxFovyDegree;
14};
15
16namespace al {
17struct SnapShotCameraSceneInfo;
18class ICameraInput;
19class IUseCollision;
20
21class SnapShotCameraCtrl : public NerveExecutor, public IUseAudioKeeper {
22public:
23 SnapShotCameraCtrl(const SnapShotCameraSceneInfo*);
24 void start(f32);
25 void load(const ByamlIter&);
26 void startReset(s32);
27 void update(const sead::LookAtCamera&, const IUseCollision*, const ICameraInput*);
28 void makeLookAtCameraPost(sead::LookAtCamera*) const;
29 void makeLookAtCameraLast(sead::LookAtCamera*) const;
30 void exeWait();
31 void exeReset();
32
33 f32 getFovyDegree() const { return mFovyDegree; };
34
35private:
36 SnapShotCameraSceneInfo* mCameraSceneInfo;
37 CameraParam* mParam;
38 bool mIsValidLookAtOffset;
39 sead::Vector3f mLookAtOffset;
40 sead::Vector3f unk1;
41 bool mIsValidZoomFovy;
42 f32 mFovyDegree;
43 f32 unk2;
44 f32 unk3;
45 f32 mMaxZoomOutFovyDegree;
46 bool mIsValidRoll;
47 f32 mRollDegree;
48 f32 mRollTarget;
49 u32 unk4;
50 bool unk5;
51};
52} // namespace al
53