using System.Collections.Generic; using System.Linq; using UnityEditor; namespace Paps.UnityToolbarExtenderUIToolkit { internal static class ScriptableGroupDefinitionHelper { private static ScriptableGroupDefinition[] _projectGroupDefinitions; static ScriptableGroupDefinitionHelper() { LoadProjectGroupDefinitions(); EditorApplication.projectChanged += OnProjectChange; } public static void Refresh() { LoadProjectGroupDefinitions(); } private static void LoadProjectGroupDefinitions() { var paths = AssetDatabase.FindAssets("t:" + nameof(ScriptableGroupDefinition)) .Select(guid => AssetDatabase.GUIDToAssetPath(guid)); _projectGroupDefinitions = paths .Select(path => AssetDatabase.LoadAssetAtPath(path)) .ToArray(); } public static IEnumerable GetUnusedMainToolbarElementIds(IEnumerable allIds) { return allIds.Except(GetUsedMainToolbarElementIds()); } private static IEnumerable GetUsedMainToolbarElementIds() { return _projectGroupDefinitions .SelectMany(groupDefinition => groupDefinition.ToolbarElementsIds); } public static IEnumerable GetGroupIds() { return _projectGroupDefinitions.Select(g => g.GroupId); } public static IEnumerable GetEligibleGroupChildsFor(string groupId) { var allUsedIds = _projectGroupDefinitions.SelectMany(g => g.ToolbarElementsIds); return _projectGroupDefinitions.Select(g => g.GroupId) .Where(id => !allUsedIds.Contains(id)) .Where(id => id != groupId); } private static void OnProjectChange() { Refresh(); } } }