From 3472daf97df454295c131ea832ca41f38179f0f8 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Sat, 27 Feb 2021 20:27:06 +0100 Subject: [PATCH 01/13] Add ortho scale on MouseScroll. --- Source/Editor/Viewport/EditorViewport.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index 00da69343..68bd5c14d 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -986,6 +986,13 @@ namespace FlaxEditor.Viewport OnMiddleMouseButtonUp(); } + if (_isOrtho) + { + var scroll = FlaxEngine.Input.MouseScrollDelta; + if (scroll != 0) + _orthoSize -= scroll * 0.2f * _orthoSize; + } + // Get clamped delta time (more stable during lags) var dt = Math.Min(Time.UnscaledDeltaTime, 1.0f); From 497209215066c14d99bbb899cde42ca075c10f34 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Sat, 27 Feb 2021 20:35:34 +0100 Subject: [PATCH 02/13] Fix when no focus. --- Source/Editor/Viewport/EditorViewport.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index 68bd5c14d..0e8c17d63 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -986,13 +986,6 @@ namespace FlaxEditor.Viewport OnMiddleMouseButtonUp(); } - if (_isOrtho) - { - var scroll = FlaxEngine.Input.MouseScrollDelta; - if (scroll != 0) - _orthoSize -= scroll * 0.2f * _orthoSize; - } - // Get clamped delta time (more stable during lags) var dt = Math.Min(Time.UnscaledDeltaTime, 1.0f); @@ -1132,6 +1125,14 @@ namespace FlaxEditor.Viewport Vector2 center = PointToWindow(_startPos); win.MousePosition = center; } + + // Change Ortho size on mouse scroll + if (_isOrtho) + { + var scroll = FlaxEngine.Input.MouseScrollDelta; + if (scroll != 0) + _orthoSize -= scroll * 0.2f * _orthoSize; + } } else { From 39e41d85285e6aec1dd677a8a6209df82dc476a5 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Sat, 27 Feb 2021 23:38:06 +0100 Subject: [PATCH 03/13] Add Mouse Wheel Sensitivity option. --- Source/Editor/Options/ViewportOptions.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/Editor/Options/ViewportOptions.cs b/Source/Editor/Options/ViewportOptions.cs index 5558ac89d..0a8d78c26 100644 --- a/Source/Editor/Options/ViewportOptions.cs +++ b/Source/Editor/Options/ViewportOptions.cs @@ -18,6 +18,13 @@ namespace FlaxEditor.Options [EditorDisplay("General"), EditorOrder(100), Tooltip("The mouse movement sensitivity scale applied when using the viewport camera.")] public float MouseSensitivity { get; set; } = 1.0f; + /// + /// Gets or sets the mouse wheel sensitivity applied to zoom in orthographic mode. + /// + [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 match the dropdown menu values in the viewport). /// From 89538cb5cd269b07a35f976501049542f40eb10e Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Sat, 27 Feb 2021 23:38:56 +0100 Subject: [PATCH 04/13] Use wheel option, and tweaks/fixes. --- Source/Editor/Viewport/EditorViewport.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index 0e8c17d63..689fd3544 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -994,6 +994,7 @@ namespace FlaxEditor.Viewport var options = Editor.Instance.Options.Options.Input; if (_isControllingMouse) { + var rmbWheel = false; // Gather input { bool isAltDown = _input.IsAltDown; @@ -1009,10 +1010,11 @@ namespace FlaxEditor.Viewport _input.IsOrbiting = isAltDown && lbDown && !mbDown && !rbDown; // Control move speed with RMB+Wheel - if (useMovementSpeed && _input.IsMouseRightDown && wheelInUse) + rmbWheel = useMovementSpeed && _input.IsMouseRightDown && wheelInUse; + if (rmbWheel) { float step = 4.0f; - _wheelMovementChangeDeltaSum += _input.MouseWheelDelta; + _wheelMovementChangeDeltaSum += _input.MouseWheelDelta * Editor.Instance.Options.Options.Viewport.MouseWheelSensitivity; int camValueIndex = -1; for (int i = 0; i < EditorViewportCameraSpeedValues.Length; i++) { @@ -1076,7 +1078,7 @@ namespace FlaxEditor.Viewport // Calculate smooth mouse delta not dependant on viewport size Vector2 offset = _viewMousePos - _startPos; - if (_input.IsZooming && !_input.IsMouseRightDown && !_input.IsMouseLeftDown && !_input.IsMouseMiddleDown) + if (_input.IsZooming && !_input.IsMouseRightDown && !_input.IsMouseLeftDown && !_input.IsMouseMiddleDown && !_isOrtho && !rmbWheel) { offset = Vector2.Zero; } @@ -1127,11 +1129,11 @@ namespace FlaxEditor.Viewport } // Change Ortho size on mouse scroll - if (_isOrtho) + if (_isOrtho && !rmbWheel) { - var scroll = FlaxEngine.Input.MouseScrollDelta; - if (scroll != 0) - _orthoSize -= scroll * 0.2f * _orthoSize; + var scroll = _input.MouseWheelDelta; + if (scroll > Mathf.Epsilon || scroll < -Mathf.Epsilon) + _orthoSize -= scroll * Editor.Instance.Options.Options.Viewport.MouseWheelSensitivity * 0.2f * _orthoSize; } } else From 19bf30558b90cd60bd6535f586469eb723f842ed Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Sun, 28 Feb 2021 15:56:19 +0100 Subject: [PATCH 05/13] Typo. --- Source/Editor/Viewport/EditorViewport.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index 689fd3544..c33031f2f 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -543,7 +543,7 @@ namespace FlaxEditor.Viewport ViewWidgetButtonMenu.VisibleChanged += control => orthoValue.Checked = _isOrtho; } - // Cara Orientation + // Camera Orientation { var cameraView = ViewWidgetButtonMenu.AddChildMenu("Orientation").ContextMenu; for (int i = 0; i < EditorViewportCameraOrientationValues.Length; i++) From eb1a520986c1a39a207b8467ab63961af4079517 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Sun, 28 Feb 2021 16:27:57 +0100 Subject: [PATCH 06/13] Support focus actor in orthographic mode ( F key ), preserve camera direction. --- Source/Editor/Viewport/Cameras/FPSCamera.cs | 22 +++++++++++++++------ Source/Editor/Viewport/EditorViewport.cs | 13 ++++++++++++ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/Source/Editor/Viewport/Cameras/FPSCamera.cs b/Source/Editor/Viewport/Cameras/FPSCamera.cs index 6d0376a89..c63fc97cd 100644 --- a/Source/Editor/Viewport/Cameras/FPSCamera.cs +++ b/Source/Editor/Viewport/Cameras/FPSCamera.cs @@ -113,12 +113,22 @@ namespace FlaxEditor.Viewport.Cameras private void ShowSphere(ref BoundingSphere sphere) { - // Calculate view transform - Quaternion orientation = new Quaternion(0.424461186f, -0.0940724313f, 0.0443938486f, 0.899451137f); - Vector3 position = sphere.Center - Vector3.Forward * orientation * (sphere.Radius * 2.5f); - - // Move viewport - TargetPoint = sphere.Center; + Quaternion orientation; + Vector3 position; + + if (Viewport.UseOrthographicProjection) + { + orientation = Quaternion.LookRotation(Viewport.ViewDirection); + var invdir = Viewport.ViewDirection; + invdir.Negate(); + position = sphere.Center + sphere.Radius * 2.5f * invdir; + } + else + { + orientation = new Quaternion(0.424461186f, -0.0940724313f, 0.0443938486f, 0.899451137f); + position = sphere.Center - Vector3.Forward * orientation * (sphere.Radius * 2.5f); + } + TargetPoint = position; MoveViewport(position, orientation); } diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index c33031f2f..6391ca10b 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -1,6 +1,7 @@ // Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. using System; +using FlaxEditor.Gizmo; using FlaxEditor.GUI.ContextMenu; using FlaxEditor.GUI.Input; using FlaxEditor.Options; @@ -538,6 +539,18 @@ namespace FlaxEditor.Viewport { _isOrtho = checkBox.Checked; ViewWidgetButtonMenu.Hide(); + if (_isOrtho) + {/* + var invdir = ViewDirection; + invdir.Negate(); + //var target = Editor.Instance.SceneEditing. + var targetpos = new Vector3(0.0f) + 2000.0f * invdir; + ((FPSCamera)ViewportCamera).MoveViewport(targetpos, ViewOrientation);*/ + if (!Editor.Instance.SceneEditing.HasSthSelected) + ((FPSCamera)ViewportCamera).ShowActor(Editor.Instance.Scene.Root.Actor); + else + ((FPSCamera)ViewportCamera).ShowActors(Editor.Instance.Windows.EditWin.Viewport.TransformGizmo.SelectedParents); + } } }; ViewWidgetButtonMenu.VisibleChanged += control => orthoValue.Checked = _isOrtho; From aaecb6f7fd8f314ccf89c7462f6441e804777700 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Sun, 28 Feb 2021 16:28:41 +0100 Subject: [PATCH 07/13] Cleanup. --- Source/Editor/Viewport/EditorViewport.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index 6391ca10b..fdf6e0591 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -540,12 +540,7 @@ namespace FlaxEditor.Viewport _isOrtho = checkBox.Checked; ViewWidgetButtonMenu.Hide(); if (_isOrtho) - {/* - var invdir = ViewDirection; - invdir.Negate(); - //var target = Editor.Instance.SceneEditing. - var targetpos = new Vector3(0.0f) + 2000.0f * invdir; - ((FPSCamera)ViewportCamera).MoveViewport(targetpos, ViewOrientation);*/ + { if (!Editor.Instance.SceneEditing.HasSthSelected) ((FPSCamera)ViewportCamera).ShowActor(Editor.Instance.Scene.Root.Actor); else From ce45070d639070e14667215218dff34cd7b25be2 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Sun, 28 Feb 2021 17:45:38 +0100 Subject: [PATCH 08/13] Tweaks. --- Source/Editor/Viewport/Cameras/FPSCamera.cs | 3 ++- Source/Editor/Viewport/EditorViewport.cs | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Source/Editor/Viewport/Cameras/FPSCamera.cs b/Source/Editor/Viewport/Cameras/FPSCamera.cs index c63fc97cd..fea8ecffb 100644 --- a/Source/Editor/Viewport/Cameras/FPSCamera.cs +++ b/Source/Editor/Viewport/Cameras/FPSCamera.cs @@ -121,7 +121,8 @@ namespace FlaxEditor.Viewport.Cameras orientation = Quaternion.LookRotation(Viewport.ViewDirection); var invdir = Viewport.ViewDirection; invdir.Negate(); - position = sphere.Center + sphere.Radius * 2.5f * invdir; + position = sphere.Center + sphere.Radius * 5.0f * invdir; + Viewport.OrthographicScale = Vector3.Distance(position, sphere.Center) / 1000; } else { diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index fdf6e0591..9731c3898 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -542,7 +542,13 @@ namespace FlaxEditor.Viewport if (_isOrtho) { if (!Editor.Instance.SceneEditing.HasSthSelected) - ((FPSCamera)ViewportCamera).ShowActor(Editor.Instance.Scene.Root.Actor); + { + var invdir = ViewDirection; + invdir.Negate(); + var target = new Vector3(0.0f) + 2000.0f * invdir; + OrthographicScale = Vector3.Distance(target, new Vector3(0.0f)) / 1000; + ((FPSCamera)ViewportCamera).MoveViewport(target, Quaternion.LookRotation(ViewDirection)); + } else ((FPSCamera)ViewportCamera).ShowActors(Editor.Instance.Windows.EditWin.Viewport.TransformGizmo.SelectedParents); } From 111eaf1cf925c742c9a539b9e88e10f0188daa66 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Mon, 1 Mar 2021 16:19:00 +0100 Subject: [PATCH 09/13] Tweaks. --- Source/Editor/Viewport/Cameras/FPSCamera.cs | 43 ++++++++++++++++----- Source/Editor/Viewport/EditorViewport.cs | 38 +++++++++++------- 2 files changed, 59 insertions(+), 22 deletions(-) diff --git a/Source/Editor/Viewport/Cameras/FPSCamera.cs b/Source/Editor/Viewport/Cameras/FPSCamera.cs index fea8ecffb..9f90d3281 100644 --- a/Source/Editor/Viewport/Cameras/FPSCamera.cs +++ b/Source/Editor/Viewport/Cameras/FPSCamera.cs @@ -88,6 +88,12 @@ namespace FlaxEditor.Viewport.Cameras Editor.GetActorEditorSphere(actor, out BoundingSphere sphere); ShowSphere(ref sphere); } + + public void ShowActor(Actor actor, ref Quaternion orientation) + { + Editor.GetActorEditorSphere(actor, out BoundingSphere sphere); + ShowSphere(ref sphere, ref orientation); + } /// /// Moves the viewport to visualize selected actors. @@ -111,28 +117,47 @@ namespace FlaxEditor.Viewport.Cameras ShowSphere(ref mergesSphere); } + public void ShowActors(List actors, ref Quaternion orientation) + { + if (actors.Count == 0) + return; + + BoundingSphere mergesSphere = BoundingSphere.Empty; + for (int i = 0; i < actors.Count; i++) + { + if (actors[i] is ActorNode actor) + { + Editor.GetActorEditorSphere(actor.Actor, out BoundingSphere sphere); + BoundingSphere.Merge(ref mergesSphere, ref sphere, out mergesSphere); + } + } + + ShowSphere(ref mergesSphere, ref orientation); + } + private void ShowSphere(ref BoundingSphere sphere) { - Quaternion orientation; + var q = new Quaternion(0.424461186f, -0.0940724313f, 0.0443938486f, 0.899451137f); + ShowSphere(ref sphere, ref q); + } + + private void ShowSphere(ref BoundingSphere sphere, ref Quaternion orientation) + { Vector3 position; if (Viewport.UseOrthographicProjection) { - orientation = Quaternion.LookRotation(Viewport.ViewDirection); - var invdir = Viewport.ViewDirection; - invdir.Negate(); - position = sphere.Center + sphere.Radius * 5.0f * invdir; + Vector3 offset = Vector3.Forward * orientation; + offset.Negate(); + position = sphere.Center + offset * (sphere.Radius * 5.0f); Viewport.OrthographicScale = Vector3.Distance(position, sphere.Center) / 1000; } else - { - orientation = new Quaternion(0.424461186f, -0.0940724313f, 0.0443938486f, 0.899451137f); position = sphere.Center - Vector3.Forward * orientation * (sphere.Radius * 2.5f); - } TargetPoint = position; MoveViewport(position, orientation); } - + /// public override void Update(float deltaTime) { diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index 9731c3898..30d846d70 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -559,14 +559,26 @@ namespace FlaxEditor.Viewport // Camera Orientation { - var cameraView = ViewWidgetButtonMenu.AddChildMenu("Orientation").ContextMenu; - for (int i = 0; i < EditorViewportCameraOrientationValues.Length; i++) + var cameraView = ViewWidgetButtonMenu.AddChildMenu("Viewpoint").ContextMenu; + for (int i = 0; i < EditorViewportCameraViewpointValues.Length; i++) { - var co = EditorViewportCameraOrientationValues[i]; + var co = EditorViewportCameraViewpointValues[i]; var button = cameraView.AddButton(co.Name); button.Tag = co.Orientation; } - cameraView.ButtonClicked += button => ViewOrientation = Quaternion.Euler((Vector3)button.Tag); + cameraView.ButtonClicked += button => + { + var orient = Quaternion.Euler((Vector3)button.Tag); + if (Editor.Instance.SceneEditing.HasSthSelected) + ((FPSCamera)ViewportCamera).ShowActors(Editor.Instance.Windows.EditWin.Viewport.TransformGizmo.SelectedParents, ref orient); + else + { + var invdir = (Vector3)button.Tag; + invdir.Negate(); + ViewPosition = new Vector3(0.0f) + Vector3.Forward * orient * 1000.0f; + ((FPSCamera)ViewportCamera).MoveViewport(ViewPosition, ViewOrientation); + } + }; } // Field of View @@ -1284,26 +1296,26 @@ namespace FlaxEditor.Viewport base.OnDestroy(); } - private struct CameraOrientation + private struct CameraViewpoint { public readonly string Name; public readonly Vector3 Orientation; - public CameraOrientation(string name, Vector3 orientation) + public CameraViewpoint(string name, Vector3 orientation) { Name = name; Orientation = orientation; } } - private readonly CameraOrientation[] EditorViewportCameraOrientationValues = + private readonly CameraViewpoint[] EditorViewportCameraViewpointValues = { - new CameraOrientation("Front", new Vector3(0, 0, 0)), - new CameraOrientation("Back", new Vector3(0, 180, 0)), - new CameraOrientation("Left", new Vector3(0, 90, 0)), - new CameraOrientation("Right", new Vector3(0, -90, 0)), - new CameraOrientation("Top", new Vector3(-90, 0, 0)), - new CameraOrientation("Bottom", new Vector3(90, 0, 0)) + new CameraViewpoint("Front", new Vector3(0, 0, 0)), + new CameraViewpoint("Back", new Vector3(0, 180, 0)), + new CameraViewpoint("Left", new Vector3(0, 90, 0)), + new CameraViewpoint("Right", new Vector3(0, -90, 0)), + new CameraViewpoint("Top", new Vector3(90, 0, 0)), + new CameraViewpoint("Bottom", new Vector3(-90, 0, 0)) }; private readonly float[] EditorViewportCameraSpeedValues = From 1deadf84b1210a3838d7877050d0ad24016580be Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Mon, 1 Mar 2021 16:25:08 +0100 Subject: [PATCH 10/13] Tweaks. --- Source/Editor/Viewport/EditorViewport.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index 30d846d70..1de876f7e 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -557,9 +557,9 @@ namespace FlaxEditor.Viewport ViewWidgetButtonMenu.VisibleChanged += control => orthoValue.Checked = _isOrtho; } - // Camera Orientation + // Camera Viewpoints { - var cameraView = ViewWidgetButtonMenu.AddChildMenu("Viewpoint").ContextMenu; + var cameraView = ViewWidgetButtonMenu.AddChildMenu("Viewpoints").ContextMenu; for (int i = 0; i < EditorViewportCameraViewpointValues.Length; i++) { var co = EditorViewportCameraViewpointValues[i]; From 512df5f6731316e15a802b5d7fad32c5588752a8 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Tue, 2 Mar 2021 18:27:14 +0100 Subject: [PATCH 11/13] Tweaks. --- Source/Editor/Viewport/EditorViewport.cs | 12 ++++++------ Source/Editor/Windows/EditGameWindow.cs | 8 +++++++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index 1de876f7e..b94d767f5 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -541,16 +541,16 @@ namespace FlaxEditor.Viewport ViewWidgetButtonMenu.Hide(); if (_isOrtho) { + var orient = ViewOrientation; if (!Editor.Instance.SceneEditing.HasSthSelected) { - var invdir = ViewDirection; - invdir.Negate(); - var target = new Vector3(0.0f) + 2000.0f * invdir; - OrthographicScale = Vector3.Distance(target, new Vector3(0.0f)) / 1000; - ((FPSCamera)ViewportCamera).MoveViewport(target, Quaternion.LookRotation(ViewDirection)); + var invdir = ViewOrientation; + invdir.Invert(); + ViewPosition = new Vector3(0.0f) + Vector3.Forward * orient * 1000.0f; + ((FPSCamera)ViewportCamera).MoveViewport(ViewPosition, ViewOrientation); } else - ((FPSCamera)ViewportCamera).ShowActors(Editor.Instance.Windows.EditWin.Viewport.TransformGizmo.SelectedParents); + ((FPSCamera)ViewportCamera).ShowActors(Editor.Instance.Windows.EditWin.Viewport.TransformGizmo.SelectedParents, ref orient); } } }; diff --git a/Source/Editor/Windows/EditGameWindow.cs b/Source/Editor/Windows/EditGameWindow.cs index 0d3a8bf95..4025f68ab 100644 --- a/Source/Editor/Windows/EditGameWindow.cs +++ b/Source/Editor/Windows/EditGameWindow.cs @@ -243,7 +243,13 @@ namespace FlaxEditor.Windows /// public void ShowSelectedActors() { - ((FPSCamera)Viewport.ViewportCamera).ShowActors(Viewport.TransformGizmo.SelectedParents); + if (Viewport.UseOrthographicProjection) + { + var orient = Viewport.ViewOrientation; + ((FPSCamera)Viewport.ViewportCamera).ShowActors(Viewport.TransformGizmo.SelectedParents, ref orient); + } + else + ((FPSCamera)Viewport.ViewportCamera).ShowActors(Viewport.TransformGizmo.SelectedParents); } /// From a82c6695041d99550448fdb6da3be2002dbd8b55 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Sat, 6 Mar 2021 13:19:49 +0100 Subject: [PATCH 12/13] Tweaks again ... --- Source/Editor/Viewport/Cameras/FPSCamera.cs | 4 +--- Source/Editor/Viewport/EditorViewport.cs | 16 ++++++---------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/Source/Editor/Viewport/Cameras/FPSCamera.cs b/Source/Editor/Viewport/Cameras/FPSCamera.cs index 9f90d3281..2e6f63a11 100644 --- a/Source/Editor/Viewport/Cameras/FPSCamera.cs +++ b/Source/Editor/Viewport/Cameras/FPSCamera.cs @@ -147,9 +147,7 @@ namespace FlaxEditor.Viewport.Cameras if (Viewport.UseOrthographicProjection) { - Vector3 offset = Vector3.Forward * orientation; - offset.Negate(); - position = sphere.Center + offset * (sphere.Radius * 5.0f); + position = sphere.Center + Vector3.Backward * orientation * (sphere.Radius * 5.0f); Viewport.OrthographicScale = Vector3.Distance(position, sphere.Center) / 1000; } else diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index b94d767f5..c1a20286c 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -544,10 +544,8 @@ namespace FlaxEditor.Viewport var orient = ViewOrientation; if (!Editor.Instance.SceneEditing.HasSthSelected) { - var invdir = ViewOrientation; - invdir.Invert(); - ViewPosition = new Vector3(0.0f) + Vector3.Forward * orient * 1000.0f; - ((FPSCamera)ViewportCamera).MoveViewport(ViewPosition, ViewOrientation); + var pos = new Vector3(0.0f) + Vector3.Backward * ViewOrientation * 1000.0f; + ((FPSCamera)ViewportCamera).MoveViewport(pos, ViewOrientation); } else ((FPSCamera)ViewportCamera).ShowActors(Editor.Instance.Windows.EditWin.Viewport.TransformGizmo.SelectedParents, ref orient); @@ -573,10 +571,8 @@ namespace FlaxEditor.Viewport ((FPSCamera)ViewportCamera).ShowActors(Editor.Instance.Windows.EditWin.Viewport.TransformGizmo.SelectedParents, ref orient); else { - var invdir = (Vector3)button.Tag; - invdir.Negate(); - ViewPosition = new Vector3(0.0f) + Vector3.Forward * orient * 1000.0f; - ((FPSCamera)ViewportCamera).MoveViewport(ViewPosition, ViewOrientation); + var pos = new Vector3(0.0f) + Vector3.Backward * orient * 2000.0f; + ((FPSCamera)ViewportCamera).MoveViewport(pos, orient); } }; } @@ -1310,8 +1306,8 @@ namespace FlaxEditor.Viewport private readonly CameraViewpoint[] EditorViewportCameraViewpointValues = { - new CameraViewpoint("Front", new Vector3(0, 0, 0)), - new CameraViewpoint("Back", new Vector3(0, 180, 0)), + new CameraViewpoint("Front", new Vector3(0, 180, 0)), + new CameraViewpoint("Back", new Vector3(0, 0, 0)), new CameraViewpoint("Left", new Vector3(0, 90, 0)), new CameraViewpoint("Right", new Vector3(0, -90, 0)), new CameraViewpoint("Top", new Vector3(90, 0, 0)), From ee33c97db681f8f8235081b5941a045adf83dad9 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Tue, 9 Mar 2021 00:03:32 +0100 Subject: [PATCH 13/13] Refactoring, docs. --- Source/Editor/Viewport/Cameras/FPSCamera.cs | 10 +++++++ Source/Editor/Viewport/EditorViewport.cs | 29 +++++++++++---------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Source/Editor/Viewport/Cameras/FPSCamera.cs b/Source/Editor/Viewport/Cameras/FPSCamera.cs index 2e6f63a11..e60def838 100644 --- a/Source/Editor/Viewport/Cameras/FPSCamera.cs +++ b/Source/Editor/Viewport/Cameras/FPSCamera.cs @@ -89,6 +89,11 @@ namespace FlaxEditor.Viewport.Cameras ShowSphere(ref sphere); } + /// + /// Moves the viewport to visualize selected actors. + /// + /// The actors to show. + /// The used orientation. public void ShowActor(Actor actor, ref Quaternion orientation) { Editor.GetActorEditorSphere(actor, out BoundingSphere sphere); @@ -117,6 +122,11 @@ namespace FlaxEditor.Viewport.Cameras ShowSphere(ref mergesSphere); } + /// + /// Moves the viewport to visualize selected actors. + /// + /// The actors to show. + /// The used orientation. public void ShowActors(List actors, ref Quaternion orientation) { if (actors.Count == 0) diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index c1a20286c..6fb97792a 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -542,13 +542,7 @@ namespace FlaxEditor.Viewport if (_isOrtho) { var orient = ViewOrientation; - if (!Editor.Instance.SceneEditing.HasSthSelected) - { - var pos = new Vector3(0.0f) + Vector3.Backward * ViewOrientation * 1000.0f; - ((FPSCamera)ViewportCamera).MoveViewport(pos, ViewOrientation); - } - else - ((FPSCamera)ViewportCamera).ShowActors(Editor.Instance.Windows.EditWin.Viewport.TransformGizmo.SelectedParents, ref orient); + OrientViewport(ref orient); } } }; @@ -567,13 +561,7 @@ namespace FlaxEditor.Viewport cameraView.ButtonClicked += button => { var orient = Quaternion.Euler((Vector3)button.Tag); - if (Editor.Instance.SceneEditing.HasSthSelected) - ((FPSCamera)ViewportCamera).ShowActors(Editor.Instance.Windows.EditWin.Viewport.TransformGizmo.SelectedParents, ref orient); - else - { - var pos = new Vector3(0.0f) + Vector3.Backward * orient * 2000.0f; - ((FPSCamera)ViewportCamera).MoveViewport(pos, orient); - } + OrientViewport(ref orient); }; } @@ -676,6 +664,19 @@ namespace FlaxEditor.Viewport task.Begin += OnRenderBegin; } + private void OrientViewport(ref Quaternion orientation) + { + if (Editor.Instance.SceneEditing.HasSthSelected) + { + ((FPSCamera)ViewportCamera).ShowActors(Editor.Instance.Windows.EditWin.Viewport.TransformGizmo.SelectedParents, ref orientation); + } + else + { + var pos = new Vector3(0.0f) + Vector3.Backward * orientation * 2000.0f; + ((FPSCamera)ViewportCamera).MoveViewport(pos, orientation); + } + } + private void OnEditorOptionsChanged(EditorOptions options) { _mouseSensitivity = options.Viewport.MouseSensitivity;