34 LEditorCamera(
const float DegFov,
const float Width,
const float Height,
35 const float NearP,
const float FarP);
41 Origin = Other.GetOrigin();
42 FocalPoint = Other.GetFocalPoint();
43 Direction = Other.GetDirection();
45 Pitch = Other.GetPitch();
49 NormalSpeed = 0.0020f;
56 void Tick(
const float DeltaTime = 0.0f);
57 void UpdateCameraView();
59 virtual ECameraType GetType()
const override {
return ECameraType::Editor; }
61 FORCEINLINE
void SetPerspective(
const float InVerticalFovDeg,
const float InNearClip = 0.1f,
const float InFarClip = 1000.0f)
63 if ((ProjectionType != ECameraProjection::Perspective)
64 || (DegPerspectiveFov != InVerticalFovDeg)
65 || (PerspectiveNear != InNearClip)
66 || (PerspectiveFar != InFarClip))
68 ProjectionType = ECameraProjection::Perspective;
69 DegPerspectiveFov = InVerticalFovDeg;
70 PerspectiveNear = InNearClip;
71 PerspectiveFar = InFarClip;
73 OnCameraProjectionChanged.Broadcast(ECameraProjection::Perspective);
77 FORCEINLINE
void SetOrthographic(
const float InWidth,
const float InHeight,
const float InNearClip = -1.0f,
const float InFarClip = 1.0f)
79 if ((ProjectionType != ECameraProjection::Perspective)
80 || (OrthographicNear != InNearClip)
81 || (OrthographicFar != InFarClip))
83 ProjectionType = ECameraProjection::Orthographic;
84 OrthographicNear = InNearClip;
85 OrthographicFar = InFarClip;
87 OnCameraProjectionChanged.Broadcast(ECameraProjection::Orthographic);
91 FORCEINLINE
void SetPosition(
const glm::vec3& InPosition)
93 Position = InPosition;
97 void SetViewportSize(
const uint16_t InWidth,
const uint16_t InHeight);
99 void MousePan(
const glm::vec2& Delta);
100 void MouseRotate(
const glm::vec2& Delta);
101 void MouseZoom(
const float Delta);
103 float GetCameraSpeed()
const;
104 std::pair<float, float> GetPanSpeed()
const;
105 float GetZoomSpeed()
const;
107 void SetPitchLocked(
const bool Locked);
108 bool IsPitchLocked()
const;
109 void SetYawLocked(
const bool Locked);
110 bool IsYawLocked()
const;
112 FORCEINLINE
float GetDistance()
const {
return Distance; }
113 FORCEINLINE
float GetNormalSpeed()
const {
return NormalSpeed; }
114 FORCEINLINE
float GetTravelSpeed()
const {
return TravelSpeed; }
115 FORCEINLINE
void SetDistance(
const float InDistance) { Distance = InDistance; }
116 FORCEINLINE
void SetNormalSpeed(
const float InSpeed) { NormalSpeed = InSpeed; }
117 FORCEINLINE
void SetTravelSpeed(
const float InSpeed) { TravelSpeed = InSpeed; }
119 FORCEINLINE glm::vec3 CalculatePosition()
const
121 return (FocalPoint - (GetForwardDirection() * Distance + PositionDelta));
129 static constexpr float MIN_SPEED = 0.00050f;
130 static constexpr float MAX_SPEED = 2.0f;
132 EEditorCameraMode CameraMode = EEditorCameraMode::Arcball;
133 uint16_t CameraActionFlags = (uint16_t)ECameraAction::None;
135 float Distance = 8.0f;
136 float NormalSpeed = 0.0020f;
137 float TravelSpeed = 1.0f;
139 glm::vec3 Position{};
140 glm::vec2 InitialMousePosition{};
141 glm::vec3 InitialFocalPoint{};
142 glm::vec3 InitialRotation{};
144 uint32_t ViewportWidth = 1280;
145 uint32_t ViewportHeight = 720;
147 friend class LEditorLayer;
148 friend class LSceneManagerPanel;