com.alicizax.unity.editor.e.../Editor/Toolbar/GroupDefinitions/ScriptableObjectGroupDefinitionRepository.cs
2025-08-01 19:32:29 +08:00

38 lines
1.6 KiB
C#

using System.Linq;
using UnityEditor;
namespace Paps.UnityToolbarExtenderUIToolkit
{
internal class ScriptableObjectGroupDefinitionRepository : IGroupDefinitionRepository
{
public GroupDefinition[] GetAll()
{
var paths = AssetDatabase.FindAssets("t:" + nameof(ScriptableGroupDefinition))
.Select(guid => AssetDatabase.GUIDToAssetPath(guid));
return paths
.Select(path => AssetDatabase.LoadAssetAtPath<ScriptableGroupDefinition>(path))
.Where(scriptableGroupDefinition => !string.IsNullOrEmpty(scriptableGroupDefinition.GroupId))
.GroupBy(scriptableGroupDefinition => scriptableGroupDefinition.GroupId)
.Select(scriptableGroupDefinition => scriptableGroupDefinition.First())
.Select(scriptableGroupDefinition => new GroupDefinition(
scriptableGroupDefinition.GroupId,
scriptableGroupDefinition.GroupName,
scriptableGroupDefinition.Alignment,
scriptableGroupDefinition.Order,
FilterIds(scriptableGroupDefinition)
)
)
.Where(m => m.ToolbarElementsIds.Length > 0)
.ToArray();
}
private string[] FilterIds(ScriptableGroupDefinition scriptableGroupDefinition)
{
return scriptableGroupDefinition.ToolbarElementsIds
.Where(id => !string.IsNullOrEmpty(id))
.Distinct()
.ToArray();
}
}
}