From ccf37e9d6861086f2e129832889484d73972f9ba Mon Sep 17 00:00:00 2001 From: Christopher Rothert Date: Wed, 4 Oct 2023 22:19:48 +0200 Subject: [PATCH] Add saving and loading of cached values for camera settings * remove "Default" from all settings in ViewportOptions as they are shown in the "Defaults" group anyway --- Source/Editor/Options/ViewportOptions.cs | 26 ++++----- Source/Editor/Viewport/EditorViewport.cs | 69 +++++++++++++++++++----- 2 files changed, 69 insertions(+), 26 deletions(-) diff --git a/Source/Editor/Options/ViewportOptions.cs b/Source/Editor/Options/ViewportOptions.cs index c780ac06a..94e3ee1fc 100644 --- a/Source/Editor/Options/ViewportOptions.cs +++ b/Source/Editor/Options/ViewportOptions.cs @@ -24,83 +24,83 @@ namespace FlaxEditor.Options [DefaultValue(1.0f), Limit(0.01f, 100.0f)] [EditorDisplay("General"), EditorOrder(101), Tooltip("The mouse wheel sensitivity applied to zoom in orthographic mode.")] public float MouseWheelSensitivity { get; set; } = 1.0f; - + /// /// Gets or sets the default movement speed for the viewport camera (must be in range between minimum and maximum movement speed values). /// [DefaultValue(1.0f), Limit(0.05f, 64.0f)] [EditorDisplay("Defaults"), EditorOrder(110), Tooltip("The default movement speed for the viewport camera (must be in range between minimum and maximum movement speed values).")] - public float DefaultMovementSpeed { get; set; } = 1.0f; + public float MovementSpeed { get; set; } = 1.0f; /// /// Gets or sets the default minimum camera movement speed. /// [DefaultValue(0.05f), Limit(0.05f, 64.0f)] [EditorDisplay("Defaults"), EditorOrder(111), Tooltip("The default minimum movement speed for the viewport camera.")] - public float DefaultMinMovementSpeed { get; set; } = 0.05f; + public float MinMovementSpeed { get; set; } = 0.05f; /// /// Gets or sets the default maximum camera movement speed. /// [DefaultValue(64.0f), Limit(32.0f, 1000.0f)] [EditorDisplay("Defaults"), EditorOrder(112), Tooltip("The default maximum movement speed for the viewport camera.")] - public float DefaultMaxMovementSpeed { get; set; } = 64f; - + public float MaxMovementSpeed { get; set; } = 64f; + /// /// Gets or sets the default near clipping plane distance for the viewport camera. /// [DefaultValue(10.0f), Limit(0.001f, 1000.0f)] [EditorDisplay("Defaults"), EditorOrder(130), Tooltip("The default near clipping plane distance for the viewport camera.")] - public float DefaultNearPlane { get; set; } = 10.0f; + public float NearPlane { get; set; } = 10.0f; /// /// Gets or sets the default far clipping plane distance for the viewport camera. /// [DefaultValue(40000.0f), Limit(10.0f)] [EditorDisplay("Defaults"), EditorOrder(140), Tooltip("The default far clipping plane distance for the viewport camera.")] - public float DefaultFarPlane { get; set; } = 40000.0f; + public float FarPlane { get; set; } = 40000.0f; /// /// Gets or sets the default field of view angle (in degrees) for the viewport camera. /// [DefaultValue(60.0f), Limit(35.0f, 160.0f, 0.1f)] [EditorDisplay("Defaults"), EditorOrder(150), Tooltip("The default field of view angle (in degrees) for the viewport camera.")] - public float DefaultFieldOfView { get; set; } = 60.0f; + public float FieldOfView { get; set; } = 60.0f; /// /// Gets or sets the default camera orthographic mode. /// [DefaultValue(false)] [EditorDisplay("Defaults"), EditorOrder(160), Tooltip("The default camera orthographic mode.")] - public bool DefaultOrthographicProjection { get; set; } = false; + public bool OrthographicProjection { get; set; } = false; /// /// Gets or sets the default camera orthographic scale (if camera uses orthographic mode). /// [DefaultValue(5.0f), Limit(0.001f, 100000.0f, 0.1f)] [EditorDisplay("Defaults"), EditorOrder(170), Tooltip("The default camera orthographic scale (if camera uses orthographic mode).")] - public float DefaultOrthographicScale { get; set; } = 5.0f; + public float OrthographicScale { get; set; } = 5.0f; /// /// Gets or sets the default panning direction for the viewport camera. /// [DefaultValue(false)] [EditorDisplay("Defaults"), EditorOrder(180), Tooltip("The default panning direction for the viewport camera.")] - public bool DefaultInvertPanning { get; set; } = false; + public bool InvertPanning { get; set; } = false; /// /// Gets or sets the default relative panning mode. /// [DefaultValue(true)] [EditorDisplay("Defaults"), EditorOrder(190), Tooltip("The default relative panning mode. Uses distance between camera and target to determine panning speed.")] - public bool DefaultRelativePanning { get; set; } = true; + public bool RelativePanning { get; set; } = true; /// /// Gets or sets the default panning speed (ignored if relative panning is speed enabled). /// [DefaultValue(0.8f), Limit(0.01f, 128.0f, 0.1f)] [EditorDisplay("Defaults"), EditorOrder(200), Tooltip("The default camera panning speed (ignored if relative panning is enabled).")] - public float DefaultPanningSpeed { get; set; } = 0.8f; + public float PanningSpeed { get; set; } = 0.8f; /// /// Gets or sets the default editor viewport grid scale. diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index da327a665..a5abfd2b7 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -134,6 +134,8 @@ namespace FlaxEditor.Viewport /// protected ViewportWidgetButton _cameraButton; + private readonly Editor _editor; + private float _mouseSensitivity; private float _movementSpeed; private float _minMovementSpeed; @@ -455,6 +457,8 @@ namespace FlaxEditor.Viewport public EditorViewport(SceneRenderTask task, ViewportCamera camera, bool useWidgets) : base(task) { + _editor = Editor.Instance; + _mouseAccelerationScale = 0.1f; _useMouseFiltering = false; _useMouseAcceleration = false; @@ -471,6 +475,30 @@ namespace FlaxEditor.Viewport SetupViewportOptions(); } + // Initialize camera values from cache + if (_editor.ProjectCache.TryGetCustomData("CameraMovementSpeedValue", out var cachedState)) + _movementSpeed = float.Parse(cachedState); + if (_editor.ProjectCache.TryGetCustomData("CameraMinMovementSpeedValue", out cachedState)) + _minMovementSpeed = float.Parse(cachedState); + if (_editor.ProjectCache.TryGetCustomData("CameraMaxMovementSpeedValue", out cachedState)) + _maxMovementSpeed = float.Parse(cachedState); + if (_editor.ProjectCache.TryGetCustomData("CameraPanningSpeedValue", out cachedState)) + _panningSpeed = float.Parse(cachedState); + if (_editor.ProjectCache.TryGetCustomData("CameraInvertPanningState", out cachedState)) + _invertPanning = bool.Parse(cachedState); + if (_editor.ProjectCache.TryGetCustomData("CameraRelativePanningState", out cachedState)) + _relativePanning = bool.Parse(cachedState); + if (_editor.ProjectCache.TryGetCustomData("CameraOrthographicState", out cachedState)) + _isOrtho = bool.Parse(cachedState); + if (_editor.ProjectCache.TryGetCustomData("CameraOrthographicSizeValue", out cachedState)) + _orthoSize = float.Parse(cachedState); + if (_editor.ProjectCache.TryGetCustomData("CameraFieldOfViewValue", out cachedState)) + _fieldOfView = float.Parse(cachedState); + if (_editor.ProjectCache.TryGetCustomData("CameraNearPlaneValue", out cachedState)) + _nearPlane = float.Parse(cachedState); + if (_editor.ProjectCache.TryGetCustomData("CameraFarPlaneValue", out cachedState)) + _farPlane = float.Parse(cachedState); + if (useWidgets) { #region Camera settings widget @@ -510,7 +538,7 @@ namespace FlaxEditor.Viewport }; var maxCamSpeedButton = cameraCM.AddButton("Max Cam Speed"); maxCamSpeedButton.CloseMenuOnClick = false; - var maxCamSpeedValue = new FloatValueBox(_maxMovementSpeed, xLocationForExtras, 2, 70.0f, _minMovementSpeed, 64.0f, 0.5f) + var maxCamSpeedValue = new FloatValueBox(_maxMovementSpeed, xLocationForExtras, 2, 70.0f, _minMovementSpeed, 1000.0f, 0.5f) { Parent = maxCamSpeedButton, }; @@ -824,26 +852,28 @@ namespace FlaxEditor.Viewport private void SetupViewportOptions() { var options = Editor.Instance.Options.Options; - _minMovementSpeed = options.Viewport.DefaultMinMovementSpeed; - _movementSpeed = options.Viewport.DefaultMovementSpeed; - _maxMovementSpeed = options.Viewport.DefaultMaxMovementSpeed; - _panningSpeed = options.Viewport.DefaultPanningSpeed; - _invertPanning = options.Viewport.DefaultInvertPanning; - _relativePanning = options.Viewport.DefaultRelativePanning; + _minMovementSpeed = options.Viewport.MinMovementSpeed; + _movementSpeed = options.Viewport.MovementSpeed; + _maxMovementSpeed = options.Viewport.MaxMovementSpeed; + _panningSpeed = options.Viewport.PanningSpeed; + _invertPanning = options.Viewport.InvertPanning; + _relativePanning = options.Viewport.RelativePanning; - _isOrtho = options.Viewport.DefaultOrthographicProjection; - _orthoSize = options.Viewport.DefaultOrthographicScale; - _fieldOfView = options.Viewport.DefaultFieldOfView; - _nearPlane = options.Viewport.DefaultNearPlane; - _farPlane = options.Viewport.DefaultFarPlane; + _isOrtho = options.Viewport.OrthographicProjection; + _orthoSize = options.Viewport.OrthographicScale; + _fieldOfView = options.Viewport.FieldOfView; + _nearPlane = options.Viewport.NearPlane; + _farPlane = options.Viewport.FarPlane; OnEditorOptionsChanged(options); } - + private void OnMovementSpeedChanged(FloatValueBox control) { var value = Mathf.Clamp(control.Value, _minMovementSpeed, _maxMovementSpeed); MovementSpeed = value; + + _editor.ProjectCache.SetCustomData("CameraMovementSpeedValue", _movementSpeed.ToString()); } private void OnMinMovementSpeedChanged(FloatValueBox control) @@ -853,6 +883,8 @@ namespace FlaxEditor.Viewport if (_movementSpeed < value) _movementSpeed = value; + + _editor.ProjectCache.SetCustomData("CameraMinMovementSpeedValue", _minMovementSpeed.ToString()); } private void OnMaxMovementSpeedChanged(FloatValueBox control) @@ -862,21 +894,26 @@ namespace FlaxEditor.Viewport if (_movementSpeed > value) _movementSpeed = value; + + _editor.ProjectCache.SetCustomData("CameraMaxMovementSpeedValue", _maxMovementSpeed.ToString()); } private void OnPanningSpeedChanged(FloatValueBox control) { _panningSpeed = control.Value; + _editor.ProjectCache.SetCustomData("CameraPanningSpeedValue", _panningSpeed.ToString()); } private void OnRelativePanningToggled(Control control) { _relativePanning = !_relativePanning; + _editor.ProjectCache.SetCustomData("CameraRelativePanningState", _relativePanning.ToString()); } private void OnInvertPanningToggled(Control control) { _invertPanning = !_invertPanning; + _editor.ProjectCache.SetCustomData("CameraInvertPanningState", _invertPanning.ToString()); } @@ -889,6 +926,7 @@ namespace FlaxEditor.Viewport private void OnFieldOfViewChanged(FloatValueBox control) { _fieldOfView = control.Value; + _editor.ProjectCache.SetCustomData("CameraFieldOfViewValue", _fieldOfView.ToString()); } private void OnOrthographicModeToggled(Control control) @@ -900,21 +938,26 @@ namespace FlaxEditor.Viewport var orient = ViewOrientation; OrientViewport(ref orient); } + + _editor.ProjectCache.SetCustomData("CameraOrthographicState", _isOrtho.ToString()); } private void OnOrthographicSizeChanged(FloatValueBox control) { _orthoSize = control.Value; + _editor.ProjectCache.SetCustomData("CameraOrthographicSizeValue", _orthoSize.ToString()); } private void OnNearPlaneChanged(FloatValueBox control) { _nearPlane = control.Value; + _editor.ProjectCache.SetCustomData("CameraNearPlaneValue", _nearPlane.ToString()); } private void OnFarPlaneChanged(FloatValueBox control) { _farPlane = control.Value; + _editor.ProjectCache.SetCustomData("CameraNearPlaneValue", _farPlane.ToString()); } ///