Files
Hasebe/Library/PackageCache/com.unity.addressables@42676f2a154e/Editor/AutoGroupGenerator/GroupLayoutCommandQueue.cs
T
2026-09-21 12:15:57 +03:00

89 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using UnityEditor.AddressableAssets.Settings;
using UnityEngine;
namespace AutoGroupGenerator
{
/// <summary>
/// Command queue that creates group layout definitions from subgraphs.
/// </summary>
internal class GroupLayoutCommandQueue : CommandQueue
{
#region Static Methods
public static string GetDefaultGroupName(Subgraph subgraph)
{
return subgraph.HashOfSources.ToString();
}
#endregion
#region Fields
private readonly DataContainer m_DataContainer;
private AddressableAssetGroupTemplate m_DefaultTemplate;
#endregion
#region Methods
public GroupLayoutCommandQueue(DataContainer dataContainer)
{
m_DataContainer = dataContainer;
Title = nameof(GroupLayoutCommandQueue);
}
public override void PreExecute()
{
m_DataContainer.GroupLayout = new Dictionary<string, GroupLayout>();
m_DefaultTemplate = AddressableUtil.FindDefaultAddressableGroupTemplate();
ClearQueue();
foreach (var pair in m_DataContainer.Subgraphs)
{
var hash = pair.Key;
var subgraph = pair.Value;
AddCommand(() => CreateGroupLayout(subgraph), hash.ToString());
}
}
public override void PostExecute()
{
SaveOutputReportToFile();
}
private void CreateGroupLayout(Subgraph subgraph)
{
var groupLayoutInfo = new GroupLayout
{
Nodes = subgraph.Nodes,
Sources = subgraph.Sources,
HashOfSources = subgraph.HashOfSources,
Name = GetDefaultGroupName(subgraph),
TemplateName = m_DefaultTemplate.Name,
};
if (groupLayoutInfo.Nodes.Count == 0)
{
throw new Exception($"group node count == 0!");
}
m_DataContainer.GroupLayout.Add(groupLayoutInfo.Name, groupLayoutInfo);
}
void SaveOutputReportToFile()
{
if (!m_DataContainer.Settings.ProcessReport.HasFlag(ProcessStepReport.GroupLayout))
return;
var summary = $"(GroupLayout.Count = {m_DataContainer.GroupLayout.Count})";
var data = new List<GroupLayout>(m_DataContainer.GroupLayout.Values);
JsonReport.SaveJsonReport(GetType(), summary, data);
}
#endregion
}
}