From 65a219512cdb7b4a80e87d9ccd58dbe17388424d Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Fri, 21 Feb 2025 15:52:43 -0600 Subject: [PATCH] Add double clicking an object reference in a prefab to select the actor within the prefab. --- .../Editors/FlaxObjectRefEditor.cs | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/Source/Editor/CustomEditors/Editors/FlaxObjectRefEditor.cs b/Source/Editor/CustomEditors/Editors/FlaxObjectRefEditor.cs index 1dc624525..bab748dcc 100644 --- a/Source/Editor/CustomEditors/Editors/FlaxObjectRefEditor.cs +++ b/Source/Editor/CustomEditors/Editors/FlaxObjectRefEditor.cs @@ -345,10 +345,19 @@ namespace FlaxEditor.CustomEditors.Editors } else { - _linkedTreeNode = Editor.Instance.Scene.GetActorNode(actor).TreeNode; - _linkedTreeNode.ExpandAllParents(); - Editor.Instance.Windows.SceneWin.SceneTreePanel.ScrollViewTo(_linkedTreeNode, true); - _linkedTreeNode.StartHighlight(); + if (PresenterContext is PropertiesWindow) + _linkedTreeNode = Editor.Instance.Scene.GetActorNode(actor).TreeNode; + else if (PresenterContext is PrefabWindow prefabWindow) + _linkedTreeNode = prefabWindow.Graph.Root.Find(actor).TreeNode; + if (_linkedTreeNode != null) + { + _linkedTreeNode.ExpandAllParents(); + if (PresenterContext is PropertiesWindow) + Editor.Instance.Windows.SceneWin.SceneTreePanel.ScrollViewTo(_linkedTreeNode, true); + else if (PresenterContext is PrefabWindow prefabWindow) + (prefabWindow.Tree.Parent as Panel).ScrollViewTo(_linkedTreeNode, true); + _linkedTreeNode.StartHighlight(); + } } return true; } @@ -391,9 +400,20 @@ namespace FlaxEditor.CustomEditors.Editors // Select object if (_value is Actor actor) - Editor.Instance.SceneEditing.Select(actor); + { + if (PresenterContext is PropertiesWindow) + Editor.Instance.SceneEditing.Select(actor); + else if (PresenterContext is PrefabWindow prefabWindow) + prefabWindow.Select(prefabWindow.Graph.Root.Find(actor)); + } else if (_value is Script script && script.Actor) - Editor.Instance.SceneEditing.Select(script.Actor); + { + var a = script.Actor; + if (PresenterContext is PropertiesWindow) + Editor.Instance.SceneEditing.Select(a); + else if (PresenterContext is PrefabWindow prefabWindow) + prefabWindow.Select(prefabWindow.Graph.Root.Find(a)); + } else if (_value is Asset asset) Editor.Instance.Windows.ContentWin.Select(asset); }