Merge branch 'enahnce-actornode-filter' of https://github.com/Tryibion/FlaxEngine into Tryibion-enahnce-actornode-filter

This commit is contained in:
Wojtek Figat
2024-08-05 18:27:34 +02:00

View File

@@ -183,9 +183,76 @@ namespace FlaxEditor.SceneGraph.GUI
isThisVisible = true; isThisVisible = true;
} }
else else
{
var splitFilter = filterText.Split(',');
var hasAllFilters = true;
foreach (var filter in splitFilter)
{
if (string.IsNullOrEmpty(filter))
continue;
var trimmedFilter = filter.Trim();
var hasFilter = false;
// Check if script
if (trimmedFilter.Contains("s:", StringComparison.OrdinalIgnoreCase))
{
// Check for any scripts
if (trimmedFilter.Equals("s:", StringComparison.OrdinalIgnoreCase))
{
if (Actor != null)
{
if (Actor.ScriptsCount > 0)
{
hasFilter = true;
}
}
}
else
{
var scriptText = trimmedFilter.Replace("s:", "", StringComparison.OrdinalIgnoreCase).Trim();
var scriptFound = false;
if (Actor != null)
{
foreach (var script in Actor.Scripts)
{
var name = TypeUtils.GetTypeDisplayName(script.GetType());
var nameNoSpaces = name.Replace(" ", "");
if (name.Contains(scriptText, StringComparison.OrdinalIgnoreCase) || nameNoSpaces.Contains(scriptText, StringComparison.OrdinalIgnoreCase))
{
scriptFound = true;
break;
}
}
}
hasFilter = scriptFound;
}
}
// Check for actor type
else if (trimmedFilter.Contains("a:", StringComparison.OrdinalIgnoreCase))
{
if (trimmedFilter.Equals("a:", StringComparison.OrdinalIgnoreCase))
{
if (Actor != null)
hasFilter = true;
}
else
{
if (Actor !=null)
{
var actorTypeText = trimmedFilter.Replace("a:", "", StringComparison.OrdinalIgnoreCase).Trim();
var name = TypeUtils.GetTypeDisplayName(Actor.GetType());
var nameNoSpaces = name.Replace(" ", "");
if (name.Contains(actorTypeText, StringComparison.OrdinalIgnoreCase) || nameNoSpaces.Contains(actorTypeText, StringComparison.OrdinalIgnoreCase))
hasFilter = true;
}
}
}
// Match text
else
{ {
var text = Text; var text = Text;
if (QueryFilterHelper.Match(filterText, text, out QueryFilterHelper.Range[] ranges)) if (QueryFilterHelper.Match(trimmedFilter, text, out QueryFilterHelper.Range[] ranges))
{ {
// Update highlights // Update highlights
if (_highlights == null) if (_highlights == null)
@@ -200,16 +267,22 @@ namespace FlaxEditor.SceneGraph.GUI
var end = font.GetCharPosition(text, ranges[i].EndIndex); var end = font.GetCharPosition(text, ranges[i].EndIndex);
_highlights.Add(new Rectangle(start.X + textRect.X, textRect.Y, end.X - start.X, textRect.Height)); _highlights.Add(new Rectangle(start.X + textRect.X, textRect.Y, end.X - start.X, textRect.Height));
} }
isThisVisible = true; hasFilter = true;
} }
else }
if (!hasFilter)
{ {
// Hide hasAllFilters = false;
_highlights?.Clear(); break;
isThisVisible = false;
} }
} }
isThisVisible = hasAllFilters;
if (!hasAllFilters)
_highlights?.Clear();
}
// Update children // Update children
bool isAnyChildVisible = false; bool isAnyChildVisible = false;
for (int i = 0; i < _children.Count; i++) for (int i = 0; i < _children.Count; i++)