1#pragma once
2
3#include <basis/seadTypes.h>
4#include <common/aglRenderBuffer.h>
5#include <container/seadPtrArray.h>
6#include <gfx/seadCamera.h>
7#include <math/seadMatrix.h>
8#include <math/seadVector.h>
9
10#include "Library/Camera/IUseCamera.h"
11#include "Library/HostIO/HioNode.h"
12
13namespace al {
14
15class SceneCameraInfo;
16class ScreenCapture;
17
18class ScreenCaptureExecutor : public IUseHioNode {
19public:
20 ScreenCaptureExecutor(s32);
21 ~ScreenCaptureExecutor();
22
23 void createScreenCapture(s32, s32, s32);
24 void draw(agl::DrawContext*, const agl::RenderBuffer*, s32) const;
25 void tryCapture(agl::DrawContext*, const agl::RenderBuffer*, s32);
26 void tryCaptureAndDraw(agl::DrawContext*, const agl::RenderBuffer*, s32);
27
28 void requestCapture(bool, s32);
29 void onDraw(s32 screenCaptureIndex);
30 void offDraw(s32 screenCaptureIndex);
31 void offDraw();
32
33 bool isDraw(s32) const;
34
35private:
36 sead::PtrArray<ScreenCapture> mArray;
37 bool mIsCaptured;
38};
39
40u32 getDisplayWidth();
41u32 getDisplayHeight();
42u32 getLayoutDisplayWidth();
43u32 getLayoutDisplayHeight();
44u32 getVirtualDisplayWidth();
45u32 getVirtualDisplayHeight();
46u32 getSubDisplayWidth();
47u32 getSubDisplayHeight();
48
49bool isInScreen(const sead::Vector2f&, f32);
50
51bool calcWorldPosFromScreen(sead::Vector3f* output, const sead::Vector2f&, const sead::Matrix34f&,
52 f32); // Always returns true
53void calcWorldPosFromScreenPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
54 f32);
55void calcWorldPosFromScreenPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
56 const sead::Vector3f&);
57void calcWorldPosFromScreenPos(sead::Vector3f* output, const SceneCameraInfo*,
58 const sead::Vector2f&, f32, s32);
59void calcWorldPosFromScreenPos(sead::Vector3f* output, const SceneCameraInfo*,
60 const sead::Vector2f&, const sead::Vector3f&, s32);
61void calcWorldPosFromScreenPosSub(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
62 f32);
63void calcWorldPosFromScreenPosSub(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
64 const sead::Vector3f&);
65void calcWorldPosFromLayoutPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
66 f32);
67void calcWorldPosFromLayoutPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
68 const sead::Vector3f&);
69void calcWorldPosFromLayoutPos(sead::Vector3f* output, const SceneCameraInfo*,
70 const sead::Vector2f&, s32, s32);
71void calcWorldPosFromLayoutPos(sead::Vector3f* output, const SceneCameraInfo*,
72 const sead::Vector2f&, const sead::Vector3f&, s32);
73void calcWorldPosFromLayoutPosSub(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
74 f32);
75void calcWorldPosFromLayoutPosSub(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
76 const sead::Vector3f&);
77
78void calcScreenPosFromWorldPos(sead::Vector2f* output, const IUseCamera*, const sead::Vector3f&);
79void calcScreenPosFromWorldPosSub(sead::Vector2f* output, const IUseCamera*, const sead::Vector3f&);
80void calcScreenPosFromLayoutPos(sead::Vector2f* output, const sead::Vector2f&);
81f32 calcScreenRadiusFromWorldRadius(const sead::Vector3f&, const IUseCamera*, f32);
82f32 calcScreenRadiusFromWorldRadiusSub(const sead::Vector3f&, const IUseCamera*, f32);
83
84void calcLayoutPosFromScreenPos(sead::Vector2f* output, const sead::Vector2f&);
85void calcLayoutPosFromWorldPos(sead::Vector2f* output, const IUseCamera*, const sead::Vector3f&);
86void calcLayoutPosFromWorldPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector3f&);
87void calcLayoutPosFromWorldPos(sead::Vector2f* output, const SceneCameraInfo*,
88 const sead::Vector3f&, s32);
89void calcLayoutPosFromWorldPos(sead::Vector3f* output, const SceneCameraInfo*,
90 const sead::Vector3f&, s32);
91void calcLayoutPosFromWorldPosSub(sead::Vector2f* output, const IUseCamera*, const sead::Vector3f&);
92void calcLayoutPosFromWorldPosWithClampOutRange(sead::Vector3f* output, const IUseCamera*,
93 const sead::Vector3f&, f32, s32);
94void calcLayoutPosFromWorldPosWithClampOutRange(sead::Vector3f* output, const SceneCameraInfo*,
95 const sead::Vector3f&, f32, s32);
96void calcLayoutPosFromWorldPosWithClampByScreen(sead::Vector3f* output, const IUseCamera*,
97 const sead::Vector3f&);
98f32 calcLayoutRadiusFromWorldRadius(const sead::Vector3f&, const IUseCamera*, f32);
99
100bool calcCameraPosToWorldPosDirFromScreenPos(sead::Vector3f* output, const IUseCamera*,
101 const sead::Vector2f&, f32);
102bool calcCameraPosToWorldPosDirFromScreenPos(sead::Vector3f* output, const IUseCamera*,
103 const sead::Vector2f&, const sead::Vector3f&);
104bool calcCameraPosToWorldPosDirFromScreenPos(sead::Vector3f* output, const SceneCameraInfo*,
105 const sead::Vector2f&, f32, s32);
106bool calcCameraPosToWorldPosDirFromScreenPos(sead::Vector3f* output, const SceneCameraInfo*,
107 const sead::Vector2f&, const sead::Vector3f&, s32);
108void calcCameraPosToWorldPosDirFromScreenPosSub(sead::Vector3f* output, const IUseCamera*,
109 const sead::Vector2f&, f32);
110void calcCameraPosToWorldPosDirFromScreenPosSub(sead::Vector3f* output, const IUseCamera*,
111 const sead::Vector2f&, const sead::Vector3f&);
112
113void calcLineCameraToWorldPosFromScreenPos(sead::Vector3f* output1, sead::Vector3f* output2,
114 const IUseCamera*, const sead::Vector2f&);
115void calcLineCameraToWorldPosFromScreenPos(sead::Vector3f* output1, sead::Vector3f* output2,
116 const IUseCamera*, const sead::Vector2f&, f32, f32);
117void calcLineCameraToWorldPosFromScreenPos(sead::Vector3f* output1, sead::Vector3f* output2,
118 const SceneCameraInfo*, const sead::Vector2f&, s32);
119void calcLineCameraToWorldPosFromScreenPos(sead::Vector3f* output1, sead::Vector3f* output2,
120 const SceneCameraInfo*, const sead::Vector2f&, f32, f32,
121 s32);
122void calcLineCameraToWorldPosFromScreenPosSub(sead::Vector3f* output1, sead::Vector3f* output2,
123 const IUseCamera*, const sead::Vector2f&);
124void calcLineCameraToWorldPosFromScreenPosSub(sead::Vector3f* output1, sead::Vector3f* output2,
125 const IUseCamera*, const sead::Vector2f&, f32, f32);
126} // namespace al
127
128namespace ScreenFunction {
129void calcWorldPositionFromCenterScreen(sead::Vector3f*, const sead::Vector2f&,
130 const sead::Vector3f&, const sead::Camera&,
131 const sead::Projection&, const sead::Viewport&);
132} // namespace ScreenFunction
133