From b4442c12b20d9659d421d3d9ce7fead4728a66db Mon Sep 17 00:00:00 2001 From: SVNMLR <44621949+SVNMLR@users.noreply.github.com> Date: Sat, 7 Oct 2023 08:43:59 +0200 Subject: [PATCH] [Editor] Improve Cameracontrol in Editor (#1879) * [Editor] Allow panning while Alt-Keys are beeing pressed * Change: Remove check for altIsDown * [Editor] Change movement speed with MouseWheel * Change: Use Mousewheel during movement to control the movement speed of the camera * [Editor] Use Camera movementspeed methods to control * [Editor] Improve speed increments * [Editor] Fix camera panning speed * Change: Do not use basespeed multiplier, to be independent from current movement speed multiplier * [Editor] Improve panning & Zoomlevels * [Editor] Improve Comments * [Editor] Improve speed calc, speedsteps & UI-layout * Change: Calculate panningspeed by multiplication & predefine the factor * Change: Add more speed increments * Change: Improve Layout in Sceneview -> Camerasettings (add display of current speed-value and extended sliderbar size, due to more increments) * [Editor] Fix margins for cameraspeed settings --- .../Game/EditorGameEntityCameraService.cs | 20 ++++++++++++++++--- .../Views/EntityHierarchyEditorView.xaml | 12 +++++------ .../ViewModels/EditorCameraViewModel.cs | 18 ++++++++++++++++- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs b/sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs index 2cda696ce4..531700a704 100644 --- a/sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs +++ b/sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs @@ -29,6 +29,7 @@ protected struct Input public bool isOrbiting; public bool isShiftDown; }; + private const float panningSpeedModifier = 0.033f; private readonly EntityHierarchyEditorViewModel editor; private float revolutionRadius; @@ -167,7 +168,7 @@ private Input GetInput() bool isAltDown = Game.Input.IsKeyDown(Keys.LeftAlt) || Game.Input.IsKeyDown(Keys.RightAlt); input.isShiftDown = Game.Input.IsKeyDown(Keys.LeftShift) || Game.Input.IsKeyDown(Keys.RightShift); - input.isPanning = !isAltDown && mbDown && !rbDown; + input.isPanning = mbDown && !rbDown; input.isRotating = !isAltDown && !mbDown && rbDown; input.isMoving = !isAltDown && mbDown && rbDown; input.isZooming = (isAltDown && !lbDown && !mbDown && rbDown) || (MathF.Abs(Game.Input.MouseWheelDelta) > MathUtil.ZeroTolerance); @@ -240,6 +241,19 @@ protected void UpdateCameraBase(ref float yaw, ref float pitch, ref Vector3 posi z = 0f; } + // Dynamically change MovementSpeed of Camera by using MouseWheel while moving around + if (input.isRotating) + { + if (Game.Input.MouseWheelDelta > 0.0f) + { + editor.Dispatcher.InvokeAsync(() => Camera.IncreaseMovementSpeed()); + } + if (Game.Input.MouseWheelDelta < 0.0f) + { + editor.Dispatcher.InvokeAsync(() => Camera.DecreaseMovementSpeed()); + } + } + var localDirection = Vector3.Normalize(new Vector3(x, y, -z)); position += Vector3.Transform(localDirection, rotation) * baseSpeed * dt * 60f; } @@ -248,7 +262,7 @@ protected void UpdateCameraBase(ref float yaw, ref float pitch, ref Vector3 posi if (input.isPanning) { float panningSpeed = asOrthographic ? Component.OrthographicSize : revolutionRadius; - panningSpeed *= MouseMoveSpeedFactor * baseSpeed; + panningSpeed *= MouseMoveSpeedFactor * baseSpeed * panningSpeedModifier; if (InvertPanningAxis.GetValue()) panningSpeed = -panningSpeed; @@ -272,7 +286,7 @@ protected void UpdateCameraBase(ref float yaw, ref float pitch, ref Vector3 posi } // Forward/backward - if (input.isZooming) + if (!input.isRotating && input.isZooming) { if (asOrthographic) { diff --git a/sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Views/EntityHierarchyEditorView.xaml b/sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Views/EntityHierarchyEditorView.xaml index 4e2af3aed3..2e4ba924cd 100644 --- a/sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Views/EntityHierarchyEditorView.xaml +++ b/sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Views/EntityHierarchyEditorView.xaml @@ -673,12 +673,12 @@ - - - - - - + + + + + + diff --git a/sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/ViewModels/EditorCameraViewModel.cs b/sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/ViewModels/EditorCameraViewModel.cs index 823246ff52..d74e724352 100644 --- a/sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/ViewModels/EditorCameraViewModel.cs +++ b/sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/ViewModels/EditorCameraViewModel.cs @@ -23,11 +23,27 @@ public class EditorCameraViewModel : DispatcherViewModel public static float[] AvailableMovementSpeed = { + 0.05f, 0.1f, + 0.5f, 1.0f, - 3.0f, + 1.5f, + 2.5f, + 5.0f, 10.0f, + 15.0f, + 30.0f, + 45.0f, + 60.0f, + 80.0f, 100.0f, + 130.0f, + 180.0f, + 250.0f, + 400.0f, + 500.0f, + 700.0f, + 1000.0f }; public int AvailableMovementSpeedCount => AvailableMovementSpeed.Length - 1;