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;