From aa3dd14bfcdcdd1e1f698d0cbcd345b95872aae6 Mon Sep 17 00:00:00 2001
From: Ruan Lucas <79365912+RuanLucasGD@users.noreply.github.com>
Date: Thu, 10 Aug 2023 22:24:55 -0400
Subject: [PATCH 1/6] add locked focus
---
Source/Editor/Options/InputOptions.cs | 4 ++
.../Viewport/MainEditorGizmoViewport.cs | 46 +++++++++++++++++++
2 files changed, 50 insertions(+)
diff --git a/Source/Editor/Options/InputOptions.cs b/Source/Editor/Options/InputOptions.cs
index 4f2b40514..225f79b83 100644
--- a/Source/Editor/Options/InputOptions.cs
+++ b/Source/Editor/Options/InputOptions.cs
@@ -60,6 +60,10 @@ namespace FlaxEditor.Options
[EditorDisplay("Common"), EditorOrder(200)]
public InputBinding FocusSelection = new InputBinding(KeyboardKeys.F);
+ [DefaultValue(typeof(InputBinding), "F")]
+ [EditorDisplay("Common"), EditorOrder(200)]
+ public InputBinding LockFocusSelection = new InputBinding(KeyboardKeys.F, KeyboardKeys.Shift);
+
[DefaultValue(typeof(InputBinding), "Ctrl+F")]
[EditorDisplay("Common"), EditorOrder(210)]
public InputBinding Search = new InputBinding(KeyboardKeys.F, KeyboardKeys.Control);
diff --git a/Source/Editor/Viewport/MainEditorGizmoViewport.cs b/Source/Editor/Viewport/MainEditorGizmoViewport.cs
index 48cd4fd98..78e5cbf56 100644
--- a/Source/Editor/Viewport/MainEditorGizmoViewport.cs
+++ b/Source/Editor/Viewport/MainEditorGizmoViewport.cs
@@ -133,6 +133,7 @@ namespace FlaxEditor.Viewport
}
}
+ private bool _lockedFocus;
private readonly ViewportDebugDrawData _debugDrawData = new ViewportDebugDrawData(32);
private StaticModel _previewStaticModel;
private int _previewModelEntryIndex;
@@ -386,11 +387,40 @@ namespace FlaxEditor.Viewport
InputActions.Add(options => options.TranslateMode, () => TransformGizmo.ActiveMode = TransformGizmoBase.Mode.Translate);
InputActions.Add(options => options.RotateMode, () => TransformGizmo.ActiveMode = TransformGizmoBase.Mode.Rotate);
InputActions.Add(options => options.ScaleMode, () => TransformGizmo.ActiveMode = TransformGizmoBase.Mode.Scale);
+
+ InputActions.Add(options => options.LockFocusSelection, LockFocusSelection);
InputActions.Add(options => options.FocusSelection, FocusSelection);
InputActions.Add(options => options.RotateSelection, RotateSelection);
InputActions.Add(options => options.Delete, _editor.SceneEditing.Delete);
}
+ public override void Update(float deltaTime)
+ {
+ base.Update(deltaTime);
+
+ var hasSelections = TransformGizmo.SelectedParents.Count != 0;
+ var requestUnlockFocus = FlaxEngine.Input.Mouse.GetButtonDown(MouseButton.Right) || FlaxEngine.Input.Mouse.GetButtonDown(MouseButton.Left);
+
+ if ((IsFocused && requestUnlockFocus) || !hasSelections)
+ {
+ UnlockFocusSelection();
+ }
+
+ if (_lockedFocus)
+ {
+ BoundingSphere selectionBounds = BoundingSphere.Empty;
+ for (int i = 0; i < TransformGizmo.SelectedParents.Count; i++)
+ {
+ TransformGizmo.SelectedParents[i].GetEditorSphere(out var sphere);
+ BoundingSphere.Merge(ref selectionBounds, ref sphere, out selectionBounds);
+ }
+
+ var focusDistance = Mathf.Max(selectionBounds.Radius * 2f, 100f);
+ var viewportPosition = selectionBounds.Center + (-ViewDirection * focusDistance);
+ ViewPosition = viewportPosition;
+ }
+ }
+
///
/// Overrides the selection outline effect or restored the default one.
///
@@ -753,6 +783,22 @@ namespace FlaxEditor.Viewport
FocusSelection(ref orientation);
}
+ ///
+ /// Lock focus on the current selection gizmo.
+ ///
+ public void LockFocusSelection()
+ {
+ _lockedFocus = true;
+ }
+
+ ///
+ /// Unlock focus on the current selection.
+ ///
+ public void UnlockFocusSelection()
+ {
+ _lockedFocus = false;
+ }
+
///
/// Focuses the viewport on the current selection of the gizmo.
///
From f2072028d4e5a488296784f14d1ca7dee6d8775e Mon Sep 17 00:00:00 2001
From: Ruan Lucas <79365912+RuanLucasGD@users.noreply.github.com>
Date: Thu, 10 Aug 2023 22:31:03 -0400
Subject: [PATCH 2/6] change default key
---
Source/Editor/Options/InputOptions.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Source/Editor/Options/InputOptions.cs b/Source/Editor/Options/InputOptions.cs
index 225f79b83..e0a51622b 100644
--- a/Source/Editor/Options/InputOptions.cs
+++ b/Source/Editor/Options/InputOptions.cs
@@ -60,7 +60,7 @@ namespace FlaxEditor.Options
[EditorDisplay("Common"), EditorOrder(200)]
public InputBinding FocusSelection = new InputBinding(KeyboardKeys.F);
- [DefaultValue(typeof(InputBinding), "F")]
+ [DefaultValue(typeof(InputBinding), "Shift+F")]
[EditorDisplay("Common"), EditorOrder(200)]
public InputBinding LockFocusSelection = new InputBinding(KeyboardKeys.F, KeyboardKeys.Shift);
From 645977f14824623b409601cfd6d96c127e4bc339 Mon Sep 17 00:00:00 2001
From: Ruan Lucas <79365912+RuanLucasGD@users.noreply.github.com>
Date: Thu, 10 Aug 2023 22:41:48 -0400
Subject: [PATCH 3/6] add scroll to focus
---
Source/Editor/Viewport/MainEditorGizmoViewport.cs | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/Source/Editor/Viewport/MainEditorGizmoViewport.cs b/Source/Editor/Viewport/MainEditorGizmoViewport.cs
index 78e5cbf56..90a5b8f22 100644
--- a/Source/Editor/Viewport/MainEditorGizmoViewport.cs
+++ b/Source/Editor/Viewport/MainEditorGizmoViewport.cs
@@ -134,6 +134,7 @@ namespace FlaxEditor.Viewport
}
private bool _lockedFocus;
+ private float _lockedFocusOffset;
private readonly ViewportDebugDrawData _debugDrawData = new ViewportDebugDrawData(32);
private StaticModel _previewStaticModel;
private int _previewModelEntryIndex;
@@ -408,7 +409,7 @@ namespace FlaxEditor.Viewport
if (_lockedFocus)
{
- BoundingSphere selectionBounds = BoundingSphere.Empty;
+ var selectionBounds = BoundingSphere.Empty;
for (int i = 0; i < TransformGizmo.SelectedParents.Count; i++)
{
TransformGizmo.SelectedParents[i].GetEditorSphere(out var sphere);
@@ -416,7 +417,14 @@ namespace FlaxEditor.Viewport
}
var focusDistance = Mathf.Max(selectionBounds.Radius * 2f, 100f);
- var viewportPosition = selectionBounds.Center + (-ViewDirection * focusDistance);
+
+ if (IsFocused)
+ {
+ _lockedFocusOffset += -FlaxEngine.Input.Mouse.ScrollDelta * focusDistance;
+ }
+
+ var viewportPosition = selectionBounds.Center + (-ViewDirection * (focusDistance + _lockedFocusOffset));
+
ViewPosition = viewportPosition;
}
}
@@ -797,6 +805,7 @@ namespace FlaxEditor.Viewport
public void UnlockFocusSelection()
{
_lockedFocus = false;
+ _lockedFocusOffset = 0f;
}
///
From db806ad500a9c07cdd318654d0f76b26f58b4c76 Mon Sep 17 00:00:00 2001
From: Ruan Lucas <79365912+RuanLucasGD@users.noreply.github.com>
Date: Fri, 11 Aug 2023 08:28:28 -0400
Subject: [PATCH 4/6] fix for large worlds
---
Source/Editor/Viewport/MainEditorGizmoViewport.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Source/Editor/Viewport/MainEditorGizmoViewport.cs b/Source/Editor/Viewport/MainEditorGizmoViewport.cs
index 90a5b8f22..a40ff5369 100644
--- a/Source/Editor/Viewport/MainEditorGizmoViewport.cs
+++ b/Source/Editor/Viewport/MainEditorGizmoViewport.cs
@@ -134,7 +134,7 @@ namespace FlaxEditor.Viewport
}
private bool _lockedFocus;
- private float _lockedFocusOffset;
+ private double _lockedFocusOffset;
private readonly ViewportDebugDrawData _debugDrawData = new ViewportDebugDrawData(32);
private StaticModel _previewStaticModel;
private int _previewModelEntryIndex;
@@ -416,7 +416,7 @@ namespace FlaxEditor.Viewport
BoundingSphere.Merge(ref selectionBounds, ref sphere, out selectionBounds);
}
- var focusDistance = Mathf.Max(selectionBounds.Radius * 2f, 100f);
+ var focusDistance = Mathf.Max(selectionBounds.Radius * 2d, 100d);
if (IsFocused)
{
From be33fc6018fb4241f7848b876e3bed8efff2c173 Mon Sep 17 00:00:00 2001
From: Ruan Lucas <79365912+RuanLucasGD@users.noreply.github.com>
Date: Fri, 11 Aug 2023 22:31:12 -0400
Subject: [PATCH 5/6] improv scroll locked focus
---
Source/Editor/Viewport/MainEditorGizmoViewport.cs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Source/Editor/Viewport/MainEditorGizmoViewport.cs b/Source/Editor/Viewport/MainEditorGizmoViewport.cs
index a40ff5369..3132faf39 100644
--- a/Source/Editor/Viewport/MainEditorGizmoViewport.cs
+++ b/Source/Editor/Viewport/MainEditorGizmoViewport.cs
@@ -420,7 +420,8 @@ namespace FlaxEditor.Viewport
if (IsFocused)
{
- _lockedFocusOffset += -FlaxEngine.Input.Mouse.ScrollDelta * focusDistance;
+ var viewportFocusDistance = Vector3.Distance(ViewPosition, selectionBounds.Center) / 10f;
+ _lockedFocusOffset -= FlaxEngine.Input.Mouse.ScrollDelta * viewportFocusDistance;
}
var viewportPosition = selectionBounds.Center + (-ViewDirection * (focusDistance + _lockedFocusOffset));
From 95fdcf01bea08b91eed198c22f396576ed58ece1 Mon Sep 17 00:00:00 2001
From: Wojtek Figat
Date: Mon, 14 Aug 2023 18:53:11 +0200
Subject: [PATCH 6/6] Codestyle fix
---
.../Viewport/MainEditorGizmoViewport.cs | 23 ++++++++-----------
1 file changed, 9 insertions(+), 14 deletions(-)
diff --git a/Source/Editor/Viewport/MainEditorGizmoViewport.cs b/Source/Editor/Viewport/MainEditorGizmoViewport.cs
index 3132faf39..8d7039dc6 100644
--- a/Source/Editor/Viewport/MainEditorGizmoViewport.cs
+++ b/Source/Editor/Viewport/MainEditorGizmoViewport.cs
@@ -388,45 +388,40 @@ namespace FlaxEditor.Viewport
InputActions.Add(options => options.TranslateMode, () => TransformGizmo.ActiveMode = TransformGizmoBase.Mode.Translate);
InputActions.Add(options => options.RotateMode, () => TransformGizmo.ActiveMode = TransformGizmoBase.Mode.Rotate);
InputActions.Add(options => options.ScaleMode, () => TransformGizmo.ActiveMode = TransformGizmoBase.Mode.Scale);
-
InputActions.Add(options => options.LockFocusSelection, LockFocusSelection);
InputActions.Add(options => options.FocusSelection, FocusSelection);
InputActions.Add(options => options.RotateSelection, RotateSelection);
InputActions.Add(options => options.Delete, _editor.SceneEditing.Delete);
}
+ ///
public override void Update(float deltaTime)
{
base.Update(deltaTime);
- var hasSelections = TransformGizmo.SelectedParents.Count != 0;
+ var selection = TransformGizmo.SelectedParents;
var requestUnlockFocus = FlaxEngine.Input.Mouse.GetButtonDown(MouseButton.Right) || FlaxEngine.Input.Mouse.GetButtonDown(MouseButton.Left);
-
- if ((IsFocused && requestUnlockFocus) || !hasSelections)
+ if (TransformGizmo.SelectedParents.Count == 0 || (requestUnlockFocus && ContainsFocus))
{
UnlockFocusSelection();
}
-
- if (_lockedFocus)
+ else if (_lockedFocus)
{
var selectionBounds = BoundingSphere.Empty;
- for (int i = 0; i < TransformGizmo.SelectedParents.Count; i++)
+ for (int i = 0; i < selection.Count; i++)
{
- TransformGizmo.SelectedParents[i].GetEditorSphere(out var sphere);
+ selection[i].GetEditorSphere(out var sphere);
BoundingSphere.Merge(ref selectionBounds, ref sphere, out selectionBounds);
}
- var focusDistance = Mathf.Max(selectionBounds.Radius * 2d, 100d);
-
- if (IsFocused)
+ if (ContainsFocus)
{
var viewportFocusDistance = Vector3.Distance(ViewPosition, selectionBounds.Center) / 10f;
_lockedFocusOffset -= FlaxEngine.Input.Mouse.ScrollDelta * viewportFocusDistance;
}
- var viewportPosition = selectionBounds.Center + (-ViewDirection * (focusDistance + _lockedFocusOffset));
-
- ViewPosition = viewportPosition;
+ var focusDistance = Mathf.Max(selectionBounds.Radius * 2d, 100d);
+ ViewPosition = selectionBounds.Center + (-ViewDirection * (focusDistance + _lockedFocusOffset));
}
}