diff --git a/Source/Editor/Options/ViewportOptions.cs b/Source/Editor/Options/ViewportOptions.cs
index 26caa2694..c934fc348 100644
--- a/Source/Editor/Options/ViewportOptions.cs
+++ b/Source/Editor/Options/ViewportOptions.cs
@@ -46,11 +46,18 @@ namespace FlaxEditor.Options
[EditorDisplay("Defaults"), EditorOrder(112), Tooltip("The default maximum movement speed for the viewport camera.")]
public float MaxMovementSpeed { get; set; } = 64f;
+ ///
+ /// Gets or sets the default camera easing mode.
+ ///
+ [DefaultValue(true)]
+ [EditorDisplay("Defaults"), EditorOrder(120), Tooltip("The default camera easing mode.")]
+ public bool UseCameraEasing { get; set; } = true;
+
///
/// Gets or sets the degree to which the camera will be eased when using camera flight in the editor window.
///
[DefaultValue(3.0f), Limit(1.0f, 8.0f)]
- [EditorDisplay("Defaults"), EditorOrder(120), Tooltip("The default degree to which the camera will be eased when using camera flight in the editor window.")]
+ [EditorDisplay("Defaults"), EditorOrder(121), Tooltip("The default degree to which the camera will be eased when using camera flight in the editor window (ignored if camera easing degree is enabled).")]
public float CameraEasingDegree { get; set; } = 3.0f;
///
@@ -79,7 +86,7 @@ namespace FlaxEditor.Options
///
[DefaultValue(false)]
[EditorDisplay("Defaults"), EditorOrder(160), Tooltip("The default camera orthographic mode.")]
- public bool OrthographicProjection { get; set; } = false;
+ public bool UseOrthographicProjection { get; set; } = false;
///
/// Gets or sets the default camera orthographic scale (if camera uses orthographic mode).
@@ -100,7 +107,7 @@ namespace FlaxEditor.Options
///
[DefaultValue(true)]
[EditorDisplay("Defaults"), EditorOrder(190), Tooltip("The default relative panning mode. Uses distance between camera and target to determine panning speed.")]
- public bool RelativePanning { get; set; } = true;
+ public bool UseRelativePanning { get; set; } = true;
///
/// Gets or sets the default panning speed (ignored if relative panning is speed enabled).
diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs
index f83d9eb98..de4311452 100644
--- a/Source/Editor/Viewport/EditorViewport.cs
+++ b/Source/Editor/Viewport/EditorViewport.cs
@@ -187,13 +187,14 @@ namespace FlaxEditor.Viewport
private float _farPlane;
private float _orthoSize;
private bool _isOrtho;
+ private bool _useCameraEasing;
private float _cameraEasingDegree;
private float _panningSpeed;
private bool _relativePanning;
private bool _invertPanning;
private float _linearMovementProgress;
- private float _easedMovementProgress;
+ private float _easedMovementProgress = 0.0f;
///
/// Speed of the mouse.
@@ -238,6 +239,15 @@ namespace FlaxEditor.Viewport
set => _maxMovementSpeed = value;
}
+ ///
+ /// Gets or sets the camera easing mode.
+ ///
+ public bool UseCameraEasing
+ {
+ get => _useCameraEasing;
+ set => _useCameraEasing = value;
+ }
+
///
/// Gets the mouse movement position delta (user press and move).
///
@@ -490,6 +500,8 @@ namespace FlaxEditor.Viewport
_minMovementSpeed = float.Parse(cachedState);
if (_editor.ProjectCache.TryGetCustomData("CameraMaxMovementSpeedValue", out cachedState))
_maxMovementSpeed = float.Parse(cachedState);
+ if (_editor.ProjectCache.TryGetCustomData("UseCameraEasingState", out cachedState))
+ _useCameraEasing = bool.Parse(cachedState);
if (_editor.ProjectCache.TryGetCustomData("CameraPanningSpeedValue", out cachedState))
_panningSpeed = float.Parse(cachedState);
if (_editor.ProjectCache.TryGetCustomData("CameraInvertPanningState", out cachedState))
@@ -584,6 +596,19 @@ namespace FlaxEditor.Viewport
};
cameraCM.VisibleChanged += control => maxCamSpeedValue.Value = _maxMovementSpeed;
+ // Camera easing
+ {
+ var useCameraEasing = cameraCM.AddButton("Camera Easing");
+ useCameraEasing.CloseMenuOnClick = false;
+ var useCameraEasingValue = new CheckBox(xLocationForExtras, 2, _useCameraEasing)
+ {
+ Parent = useCameraEasing
+ };
+
+ useCameraEasingValue.StateChanged += OnCameraEasingToggled;
+ cameraCM.VisibleChanged += control => useCameraEasingValue.Checked = _useCameraEasing;
+ }
+
// Panning speed
{
var panningSpeed = cameraCM.AddButton("Panning Speed");
@@ -875,11 +900,12 @@ namespace FlaxEditor.Viewport
_minMovementSpeed = options.Viewport.MinMovementSpeed;
_movementSpeed = options.Viewport.MovementSpeed;
_maxMovementSpeed = options.Viewport.MaxMovementSpeed;
+ _useCameraEasing = options.Viewport.UseCameraEasing;
_panningSpeed = options.Viewport.PanningSpeed;
_invertPanning = options.Viewport.InvertPanning;
- _relativePanning = options.Viewport.RelativePanning;
+ _relativePanning = options.Viewport.UseRelativePanning;
- _isOrtho = options.Viewport.OrthographicProjection;
+ _isOrtho = options.Viewport.UseOrthographicProjection;
_orthoSize = options.Viewport.OrthographicScale;
_fieldOfView = options.Viewport.FieldOfView;
_nearPlane = options.Viewport.NearPlane;
@@ -920,6 +946,14 @@ namespace FlaxEditor.Viewport
OnCameraMovementProgressChanged();
_editor.ProjectCache.SetCustomData("CameraMaxMovementSpeedValue", _maxMovementSpeed.ToString());
}
+
+ private void OnCameraEasingToggled(Control control)
+ {
+ _useCameraEasing = !_useCameraEasing;
+
+ OnCameraMovementProgressChanged();
+ _editor.ProjectCache.SetCustomData("UseCameraEasingState", _useCameraEasing.ToString());
+ }
private void OnPanningSpeedChanged(FloatValueBox control)
{
@@ -1056,6 +1090,8 @@ namespace FlaxEditor.Viewport
? 0.0f
: Mathf.Remap(_movementSpeed, _minMovementSpeed, _maxMovementSpeed, 0.0f, 1.0f);
+ if (!_useCameraEasing)
+ return;
_easedMovementProgress = InterpInverseEaseInOut(0.0f, 1.0f, _linearMovementProgress, _cameraEasingDegree);
}
@@ -1065,9 +1101,20 @@ namespace FlaxEditor.Viewport
/// The difference in camera speed adjustment as a fraction of 1.
protected void AdjustCameraMoveSpeed(float speedDelta)
{
- _easedMovementProgress = Mathf.Clamp(_easedMovementProgress + speedDelta, 0.0f, 1.0f);
- var easedSpeed = Mathf.InterpEaseInOut(_minMovementSpeed, _maxMovementSpeed, _easedMovementProgress, _cameraEasingDegree);
- MovementSpeed = Mathf.Round(easedSpeed * 100) / 100;
+ float speed;
+
+ if (_useCameraEasing)
+ {
+ _easedMovementProgress = Mathf.Clamp(_easedMovementProgress + speedDelta, 0.0f, 1.0f);
+ speed = Mathf.InterpEaseInOut(_minMovementSpeed, _maxMovementSpeed, _easedMovementProgress, _cameraEasingDegree);
+ }
+ else
+ {
+ _linearMovementProgress = Mathf.Clamp(_linearMovementProgress + speedDelta, 0.0f, 1.0f);
+ speed = Mathf.Lerp(_minMovementSpeed, _maxMovementSpeed, _linearMovementProgress);
+ }
+
+ MovementSpeed = Mathf.Round(speed * 100) / 100;
}
private void OnEditorOptionsChanged(EditorOptions options)