Fix rubber band to ignore inactive actors
This commit is contained in:
@@ -162,8 +162,8 @@ public sealed class ViewportRubberBandSelector
|
|||||||
projection.Init(_owner.Viewport);
|
projection.Init(_owner.Viewport);
|
||||||
foreach (var node in nodes)
|
foreach (var node in nodes)
|
||||||
{
|
{
|
||||||
// Check for custom can select code
|
// Skip actors that cannot be selected
|
||||||
if (!node.CanSelectActorNodeWithSelector())
|
if (!node.CanSelectInViewport)
|
||||||
continue;
|
continue;
|
||||||
var a = node.Actor;
|
var a = node.Actor;
|
||||||
|
|
||||||
|
|||||||
@@ -213,12 +213,18 @@ namespace FlaxEditor.SceneGraph
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Whether an actor node can be selected with a selector.
|
/// Whether an actor node can be selected with a selector inside editor viewport.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>True if the actor node can be selected</returns>
|
public virtual bool CanSelectInViewport
|
||||||
public virtual bool CanSelectActorNodeWithSelector()
|
|
||||||
{
|
{
|
||||||
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -33,12 +33,6 @@ namespace FlaxEditor.SceneGraph.Actors
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public override bool CanSelectActorNodeWithSelector()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the scene.
|
/// Gets the scene.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -53,6 +47,9 @@ namespace FlaxEditor.SceneGraph.Actors
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override bool CanSelectInViewport => false;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override bool CanCreatePrefab => false;
|
public override bool CanCreatePrefab => false;
|
||||||
|
|
||||||
|
|||||||
@@ -80,9 +80,6 @@ namespace FlaxEditor.SceneGraph.Actors
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override bool CanSelectActorNodeWithSelector()
|
public override bool CanSelectInViewport => base.CanSelectInViewport && Actor is UICanvas uiCanvas && uiCanvas.Is3D;
|
||||||
{
|
|
||||||
return Actor is UICanvas uiCanvas && uiCanvas.Is3D && base.CanSelectActorNodeWithSelector();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,29 +42,31 @@ namespace FlaxEditor.SceneGraph.Actors
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override bool CanSelectActorNodeWithSelector()
|
public override bool CanSelectInViewport
|
||||||
{
|
{
|
||||||
// Check if control and skip if canvas is 2D
|
get
|
||||||
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)
|
// Check if control and skip if canvas is 2D
|
||||||
{
|
if (Actor is not UIControl uiControl)
|
||||||
canvas = uiCanvas;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
controlParent = controlParent.Parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (canvas != null)
|
|
||||||
{
|
|
||||||
if (canvas.Is2D)
|
|
||||||
return false;
|
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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user