From ed3ec555619208d4b3367c08cbed3c2ece6a9cde Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 31 Mar 2025 14:12:32 +0200 Subject: [PATCH] Add Visject per-node custom search and use it for Multi Blend nodes to filter animations used --- .../Surface/Archetypes/Animation.MultiBlend.cs | 16 ++++++++++++++++ Source/Editor/Surface/SurfaceNode.cs | 10 ++++++++++ .../Editor/Windows/Search/ContentSearchWindow.cs | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Source/Editor/Surface/Archetypes/Animation.MultiBlend.cs b/Source/Editor/Surface/Archetypes/Animation.MultiBlend.cs index ffb04c6af..294cf8b84 100644 --- a/Source/Editor/Surface/Archetypes/Animation.MultiBlend.cs +++ b/Source/Editor/Surface/Archetypes/Animation.MultiBlend.cs @@ -937,6 +937,22 @@ namespace FlaxEditor.Surface.Archetypes UpdateUI(); } + + /// + public override bool Search(string text) + { + FlaxEngine.Json.JsonSerializer.ParseID(text, out var id); + if (id != Guid.Empty) + { + for (int i = 5; i < Values.Length; i += 2) + { + if ((Guid)Values[i] == id) + return true; + } + } + + return base.Search(text); + } } /// diff --git a/Source/Editor/Surface/SurfaceNode.cs b/Source/Editor/Surface/SurfaceNode.cs index da64fe613..94e1c32b8 100644 --- a/Source/Editor/Surface/SurfaceNode.cs +++ b/Source/Editor/Surface/SurfaceNode.cs @@ -862,6 +862,16 @@ namespace FlaxEditor.Surface } } + /// + /// Custom function to check if node matches a given search query. + /// + /// Text to check. + /// True if node contains a given value. + public virtual bool Search(string text) + { + return false; + } + private string GetTooltip() { StringBuilder sb = new StringBuilder(); diff --git a/Source/Editor/Windows/Search/ContentSearchWindow.cs b/Source/Editor/Windows/Search/ContentSearchWindow.cs index dd506a849..e485fc88c 100644 --- a/Source/Editor/Windows/Search/ContentSearchWindow.cs +++ b/Source/Editor/Windows/Search/ContentSearchWindow.cs @@ -617,7 +617,7 @@ namespace FlaxEngine.Windows.Search } var nodeSearchText = node.ContentSearchText; - if (newTreeNodes.Count != 0 || (nodeSearchText != null && IsSearchMatch(ref nodeSearchText))) + if (newTreeNodes.Count != 0 || (nodeSearchText != null && IsSearchMatch(ref nodeSearchText)) || node.Search(_searchText)) { AddAssetSearchResult(ref assetTreeNode, asset); var nodeTreeNode = new SearchResultTreeNode