Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion game/addons/tools/Code/Extensions/SceneEditorExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ public static bool FirstPersonCamera( this Gizmo.Instance self, CameraComponent
currentSpeed = Math.Clamp( currentSpeed, 0.25f, 100.0f );

EditorPreferences.CameraSpeed = currentSpeed;
SceneViewportWidget.LastSelected.timeSinceCameraSpeedChange = 0;
SceneViewWidget.Current.LastSelectedViewportWidget.timeSinceCameraSpeedChange = 0;
}

var sens = EditorPreferences.CameraSensitivity;
Expand Down
2 changes: 1 addition & 1 deletion game/addons/tools/Code/Scene/Mesh/Tools/TextureTool.UI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ private void AlignToFace()

private void AlignToView()
{
var sceneView = SceneViewportWidget.LastSelected;
var sceneView = SceneViewWidget.Current?.LastSelectedViewportWidget;
if ( !sceneView.IsValid() )
return;

Expand Down
10 changes: 6 additions & 4 deletions game/addons/tools/Code/Scene/SceneEditorMenus.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,13 +146,14 @@ public static void Frame()
[Shortcut( "gameObject.align-to-view", "CTRL+SHIFT+F" )]
public static void AlignToView()
{
if ( !SceneViewportWidget.LastSelected.IsValid() )
var lastSelectedViewportWidget = SceneViewWidget.Current.LastSelectedViewportWidget;
if ( !lastSelectedViewportWidget.IsValid() )
return;

if ( EditorScene.Selection.Count == 0 )
return;

var targetTransform = new Transform( SceneViewportWidget.LastSelected.State.CameraPosition, SceneViewportWidget.LastSelected.State.CameraRotation );
var targetTransform = new Transform( lastSelectedViewportWidget.State.CameraPosition, lastSelectedViewportWidget.State.CameraRotation );
var gos = EditorScene.Selection.OfType<GameObject>().ToArray();

gos.DispatchPreEdited( nameof( GameObject.LocalPosition ) );
Expand Down Expand Up @@ -331,13 +332,14 @@ private static void Nudge( Vector2 direction )
if ( !EditorScene.Selection.OfType<GameObject>().Any() )
return;

if ( !SceneViewportWidget.LastSelected.IsValid() )
var lastSelectedViewportWidget = SceneViewWidget.Current.LastSelectedViewportWidget;
if ( !lastSelectedViewportWidget.IsValid() )
return;

var gos = EditorScene.Selection.OfType<GameObject>();
using ( SceneEditorSession.Active.UndoScope( "Nudge Object(s)" ).WithGameObjectChanges( gos, GameObjectUndoFlags.Properties ).Push() )
{
var gizmoInstance = SceneViewportWidget.LastSelected.GizmoInstance;
var gizmoInstance = lastSelectedViewportWidget.GizmoInstance;

var rotation = Rotation.Identity;
if ( !gizmoInstance.Settings.GlobalSpace )
Expand Down
6 changes: 3 additions & 3 deletions game/addons/tools/Code/Scene/SceneTree/GameObjectNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -750,7 +750,7 @@ void PostCreate( GameObject go, GameObject parent )
if ( !EditorPreferences.CreateObjectsAtOrigin && !parent.IsValid() )
{
// I wonder if we should be tracing and placing it on the surface?
go.LocalPosition = SceneViewportWidget.LastSelected.State.CameraPosition + SceneViewportWidget.LastSelected.State.CameraRotation.Forward * 300;
go.LocalPosition = SceneViewWidget.Current.LastSelectedViewportWidget.State.CameraPosition + SceneViewWidget.Current.LastSelectedViewportWidget.State.CameraRotation.Forward * 300;
}

afterCreate?.Invoke( go );
Expand Down Expand Up @@ -813,7 +813,7 @@ void PostCreate( GameObject go, GameObject parent )
if ( !EditorPreferences.CreateObjectsAtOrigin && !parent.IsValid() )
{
// I wonder if we should be tracing and placing it on the surface?
go.LocalPosition = SceneViewportWidget.LastSelected.State.CameraPosition + SceneViewportWidget.LastSelected.State.CameraRotation.Forward * 300;
go.LocalPosition = SceneViewWidget.Current.LastSelectedViewportWidget.State.CameraPosition + SceneViewWidget.Current.LastSelectedViewportWidget.State.CameraRotation.Forward * 300;
}

afterCreate?.Invoke( go );
Expand Down Expand Up @@ -891,7 +891,7 @@ void PostCreate( GameObject go )
if ( !EditorPreferences.CreateObjectsAtOrigin && !parent.IsValid() )
{
// I wonder if we should be tracing and placing it on the surface?
go.LocalPosition = SceneViewportWidget.LastSelected.State.CameraPosition + SceneViewportWidget.LastSelected.State.CameraRotation.Forward * 300;
go.LocalPosition = SceneViewWidget.Current.LastSelectedViewportWidget.State.CameraPosition + SceneViewWidget.Current.LastSelectedViewportWidget.State.CameraRotation.Forward * 300;
}

afterCreate?.Invoke( go );
Expand Down
9 changes: 9 additions & 0 deletions game/addons/tools/Code/Scene/SceneView/SceneViewWidget.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ public ViewportLayoutMode ViewportLayout

public static SceneViewWidget Current { get; private set; }

public SceneViewportWidget LastSelectedViewportWidget { get; set; }

public EditorToolManager Tools { get; private set; }

/// <summary>
Expand Down Expand Up @@ -338,6 +340,13 @@ void OnToolChanged()

toolWidget.Focus();
}
else
{
if ( SceneViewWidget.Current?.LastSelectedViewportWidget?.IsValid() ?? false )
{
SceneViewWidget.Current.LastSelectedViewportWidget.Focus();
}
}

// Update footer
var footerWidget = subTool?.CreateToolFooter() ?? rootTool?.CreateToolFooter();
Expand Down
7 changes: 3 additions & 4 deletions game/addons/tools/Code/Scene/SceneView/SceneViewportWidget.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

public partial class SceneViewportWidget : Widget
{
public static SceneViewportWidget LastSelected { get; private set; }
public static Vector2 MousePosition { get; private set; }

public int Id { get; private set; }
Expand Down Expand Up @@ -43,7 +42,7 @@ public SceneViewportWidget( SceneViewWidget sceneView, int id ) : base( sceneVie
Id = id;
if ( Id == 0 )
{
LastSelected = this;
SceneView.LastSelectedViewportWidget = this;
}

if ( ProjectCookie.Get<ViewportState>( $"SceneView.Viewport{Id}.Settings", null ) is ViewportState savedSettings )
Expand Down Expand Up @@ -447,9 +446,9 @@ void OnEditorPreFrame()
//

var hasMouseFocus = hasMouseInput;
if ( IsFocused )
if ( IsFocused && SceneViewWidget.Current.IsValid() )
{
LastSelected = this;
SceneViewWidget.Current.LastSelectedViewportWidget = this;
}

GizmoInstance.Input.IsHovered = hasMouseFocus;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ void LookAt()
{
EditorToolManager.CurrentModeName = "camera.lookat";
// maintain focus on scene even after clicking the button
SceneViewportWidget.LastSelected?.Focus();
SceneViewWidget.Current?.LastSelectedViewportWidget?.Focus();
}

void CloseWindow()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ void Rebuild()
isPickingEnd = false;
isAddingNewLink = false;
helpLabel.Text = "Pick start position for selected link. Press Ctrl or Cancel Button to cancel.";
SceneViewportWidget.LastSelected.Focus();
SceneViewWidget.Current?.LastSelectedViewportWidget?.Focus();
}
} );

Expand All @@ -120,7 +120,7 @@ void Rebuild()
isPickingStart = false;
isAddingNewLink = false;
helpLabel.Text = "Pick end position for selected link. Press Ctrl or Cancel Button to cancel.";
SceneViewportWidget.LastSelected.Focus();
SceneViewWidget.Current?.LastSelectedViewportWidget?.Focus();
}
} );

Expand All @@ -132,7 +132,7 @@ void Rebuild()
isAddingNewLink = true;
isPickingStart = true;
helpLabel.Text = "Pick start Position for new link. Press Ctrl or Cancel Button to cancel.";
SceneViewportWidget.LastSelected.Focus();
SceneViewWidget.Current?.LastSelectedViewportWidget?.Focus();
}
} );

Expand Down