diff --git a/Source/Editor/CustomEditors/Editors/FlaxObjectRefEditor.cs b/Source/Editor/CustomEditors/Editors/FlaxObjectRefEditor.cs index 18953e88f..908aba278 100644 --- a/Source/Editor/CustomEditors/Editors/FlaxObjectRefEditor.cs +++ b/Source/Editor/CustomEditors/Editors/FlaxObjectRefEditor.cs @@ -24,6 +24,7 @@ namespace FlaxEditor.CustomEditors.Editors public class FlaxObjectRefPickerControl : Control { private ScriptType _type; + private ActorTreeNode _linkedTreeNode; private Object _value; private string _valueName; private bool _supportsPickDropDown; @@ -308,22 +309,50 @@ namespace FlaxEditor.CustomEditors.Editors if (button == MouseButton.Left) { - _isMouseDown = false; - + // Highlight actor reference. if (Value is Actor a && !_hasValidDragOver) { - ActorTreeNode treeNode = Editor.Instance.Scene.GetActorNode(a).TreeNode; - treeNode.ExpandAllParents(); - Editor.Instance.Windows.SceneWin.SceneTreePanel.ScrollViewTo(treeNode, true); - treeNode.StartHighlight(); + if (_linkedTreeNode != null && _linkedTreeNode.Actor == a) + { + _linkedTreeNode.ExpandAllParents(); + _linkedTreeNode.StartHighlight(); + } + else + { + _linkedTreeNode = Editor.Instance.Scene.GetActorNode(a).TreeNode; + _linkedTreeNode.ExpandAllParents(); + Editor.Instance.Windows.SceneWin.SceneTreePanel.ScrollViewTo(_linkedTreeNode, true); + _linkedTreeNode.StartHighlight(); + } return true; } + // Highlight actor with script reference. if (Value is Script s && !IsDragOver && !_hasValidDragOver) { - // TODO: Highlight scripts when Value is a script + var scriptActor = s.Actor; + if (scriptActor != null) + { + if (_linkedTreeNode != null && _linkedTreeNode.Actor == scriptActor) + { + _linkedTreeNode.ExpandAllParents(); + _linkedTreeNode.StartHighlight(); + } + else + { + _linkedTreeNode = Editor.Instance.Scene.GetActorNode(scriptActor).TreeNode; + _linkedTreeNode.ExpandAllParents(); + Editor.Instance.Windows.SceneWin.SceneTreePanel.ScrollViewTo(_linkedTreeNode, true); + _linkedTreeNode.StartHighlight(); + } + return true; + } } + + // Reset valid drag over if still true at this point. + if (_hasValidDragOver) + _hasValidDragOver = false; } return base.OnMouseUp(location, button); @@ -350,6 +379,8 @@ namespace FlaxEditor.CustomEditors.Editors // Check if has object selected if (_value != null) { + if (_linkedTreeNode != null) + _linkedTreeNode.StopHighlight(); // Select object if (_value is Actor actor) Editor.Instance.SceneEditing.Select(actor); @@ -493,6 +524,7 @@ namespace FlaxEditor.CustomEditors.Editors _value = null; _type = ScriptType.Null; _valueName = null; + _linkedTreeNode = null; base.OnDestroy(); } diff --git a/Source/Editor/GUI/Tree/TreeNode.cs b/Source/Editor/GUI/Tree/TreeNode.cs index 7059266c4..90639cebc 100644 --- a/Source/Editor/GUI/Tree/TreeNode.cs +++ b/Source/Editor/GUI/Tree/TreeNode.cs @@ -33,6 +33,8 @@ namespace FlaxEditor.GUI.Tree private bool _isHightlighted; private float _targetHighlightTimeSec; private float _currentHighlightTimeSec; + // Used to prevent showing highlight on double mouse click + private float _debounceHighlightTime; private float _highlightScale; private bool _mouseOverArrow, _mouseOverHeader; private float _xOffset, _textWidth; @@ -621,6 +623,7 @@ namespace FlaxEditor.GUI.Tree _isHightlighted = true; _targetHighlightTimeSec = durationSec; _currentHighlightTimeSec = 0; + _debounceHighlightTime = 0; _highlightScale = 2f; } @@ -632,6 +635,7 @@ namespace FlaxEditor.GUI.Tree _isHightlighted = false; _targetHighlightTimeSec = 0; _currentHighlightTimeSec = 0; + _debounceHighlightTime = 0; } /// @@ -640,6 +644,7 @@ namespace FlaxEditor.GUI.Tree // Highlight animations if (_isHightlighted) { + _debounceHighlightTime += deltaTime; _currentHighlightTimeSec += deltaTime; // In the first second, animate the highlight to shrink into it's resting position @@ -723,7 +728,7 @@ namespace FlaxEditor.GUI.Tree trueTextRect.Width = textWidth; trueTextRect.Scale(_highlightScale); - if (_isHightlighted) + if (_isHightlighted && _debounceHighlightTime > 0.1f) { Color highlightBackgroundColor = Editor.Instance.Options.Options.Visual.HighlightColor; highlightBackgroundColor = highlightBackgroundColor.AlphaMultiplied(0.3f); @@ -784,7 +789,7 @@ namespace FlaxEditor.GUI.Tree } } - if (_isHightlighted) + if (_isHightlighted && _debounceHighlightTime > 0.1f) { // Draw highlights Render2D.DrawRectangle(trueTextRect, Editor.Instance.Options.Options.Visual.HighlightColor, 3);