diff --git a/Source/Editor/Gizmo/ViewportRubberBandSelector.cs b/Source/Editor/Gizmo/ViewportRubberBandSelector.cs index b9f458705..36b1884ad 100644 --- a/Source/Editor/Gizmo/ViewportRubberBandSelector.cs +++ b/Source/Editor/Gizmo/ViewportRubberBandSelector.cs @@ -162,8 +162,8 @@ public sealed class ViewportRubberBandSelector projection.Init(_owner.Viewport); foreach (var node in nodes) { - // Check for custom can select code - if (!node.CanSelectActorNodeWithSelector()) + // Skip actors that cannot be selected + if (!node.CanSelectInViewport) continue; var a = node.Actor; diff --git a/Source/Editor/SceneGraph/ActorNode.cs b/Source/Editor/SceneGraph/ActorNode.cs index 0740fb84f..7d279f86b 100644 --- a/Source/Editor/SceneGraph/ActorNode.cs +++ b/Source/Editor/SceneGraph/ActorNode.cs @@ -192,7 +192,7 @@ namespace FlaxEditor.SceneGraph GetAllChildActorNodes(nodes); return nodes.ToArray(); } - + /// /// Get all nested actor nodes under this actor node. /// @@ -213,12 +213,18 @@ namespace FlaxEditor.SceneGraph } /// - /// Whether an actor node can be selected with a selector. + /// Whether an actor node can be selected with a selector inside editor viewport. /// - /// True if the actor node can be selected - public virtual bool CanSelectActorNodeWithSelector() + public virtual bool CanSelectInViewport { - return Actor && Actor.HideFlags is not (HideFlags.DontSelect or HideFlags.FullyHidden) && Actor is not EmptyActor && IsActive; + get + { + var actor = Actor; + return actor && + actor.IsActiveInHierarchy && + (actor.HideFlags & HideFlags.DontSelect) == HideFlags.None && + actor.GetType() != typeof(EmptyActor); + } } /// diff --git a/Source/Editor/SceneGraph/Actors/SceneNode.cs b/Source/Editor/SceneGraph/Actors/SceneNode.cs index 9e380ff91..88ae8b892 100644 --- a/Source/Editor/SceneGraph/Actors/SceneNode.cs +++ b/Source/Editor/SceneGraph/Actors/SceneNode.cs @@ -33,12 +33,6 @@ namespace FlaxEditor.SceneGraph.Actors } } - /// - public override bool CanSelectActorNodeWithSelector() - { - return false; - } - /// /// Gets the scene. /// @@ -53,6 +47,9 @@ namespace FlaxEditor.SceneGraph.Actors { } + /// + public override bool CanSelectInViewport => false; + /// public override bool CanCreatePrefab => false; diff --git a/Source/Editor/SceneGraph/Actors/UICanvasNode.cs b/Source/Editor/SceneGraph/Actors/UICanvasNode.cs index ef7663e5d..af1406e5d 100644 --- a/Source/Editor/SceneGraph/Actors/UICanvasNode.cs +++ b/Source/Editor/SceneGraph/Actors/UICanvasNode.cs @@ -80,9 +80,6 @@ namespace FlaxEditor.SceneGraph.Actors } /// - public override bool CanSelectActorNodeWithSelector() - { - return Actor is UICanvas uiCanvas && uiCanvas.Is3D && base.CanSelectActorNodeWithSelector(); - } + public override bool CanSelectInViewport => base.CanSelectInViewport && Actor is UICanvas uiCanvas && uiCanvas.Is3D; } } diff --git a/Source/Editor/SceneGraph/Actors/UIControlNode.cs b/Source/Editor/SceneGraph/Actors/UIControlNode.cs index 57a956665..677571d92 100644 --- a/Source/Editor/SceneGraph/Actors/UIControlNode.cs +++ b/Source/Editor/SceneGraph/Actors/UIControlNode.cs @@ -42,29 +42,31 @@ namespace FlaxEditor.SceneGraph.Actors } /// - public override bool CanSelectActorNodeWithSelector() + public override bool CanSelectInViewport { - // Check if control and skip if canvas is 2D - if (Actor is not UIControl uiControl) - return false; - UICanvas canvas = null; - var controlParent = uiControl.Parent; - while (controlParent != null && controlParent is not Scene) + get { - if (controlParent is UICanvas uiCanvas) - { - canvas = uiCanvas; - break; - } - controlParent = controlParent.Parent; - } - - if (canvas != null) - { - if (canvas.Is2D) + // Check if control and skip if canvas is 2D + if (Actor is not UIControl uiControl) return false; + UICanvas canvas = null; + var controlParent = uiControl.Parent; + while (controlParent != null && controlParent is not Scene) + { + if (controlParent is UICanvas uiCanvas) + { + canvas = uiCanvas; + break; + } + controlParent = controlParent.Parent; + } + if (canvas != null) + { + if (canvas.Is2D) + return false; + } + return base.CanSelectInViewport; } - return base.CanSelectActorNodeWithSelector(); } } }