using System; using System.Collections.Generic; using System.Linq; namespace NBC.Asset.Editor { [Serializable] public class VersionHistoryData { public string ShowName; // => $"version_{Index}_{VersionData?.BuildTime}"; public string FileName; public VersionData VersionData; /// /// 版本包 /// public readonly List Packages = new List(); } [Serializable] public class PackageChangeData { public string PackageName; /// /// 变化的bundle /// public List ChangeBundles = new List(); /// /// 新增的bundle /// public List AddBundles = new List(); /// /// 减少的bundle /// public List RemoveBundles = new List(); } /// /// 版本变化简略信息 /// [Serializable] public class VersionSimpleChangeData { /// /// 需要下载总数 /// public long DownloadSize; /// /// 每个资源包需要下载总数 /// public Dictionary PackageDownloadSize = new Dictionary(); /// /// 每个资源包新增bundle /// public Dictionary> PackageAddBundle = new Dictionary>(); /// /// 每个资源包移除bundle /// public Dictionary> PackageRemoveBundle = new Dictionary>(); /// /// 每个资源包变化的bundle /// public Dictionary> PackageChangeBundle = new Dictionary>(); } [Serializable] public class VersionChangeData { public string NewVersionName; public string OldVersionName; public VersionSimpleChangeData SimpleChangeData = new VersionSimpleChangeData(); /// /// 变化的package /// public List ChangePackage = new List(); public enum TypeEnum { Add, Change, Remove } public void Change(BundleData bundleData, TypeEnum typeEnum) { var packageChangeData = ChangePackage.Find(p => p.PackageName == bundleData.PackageName); if (packageChangeData == null) { packageChangeData = new PackageChangeData(); packageChangeData.PackageName = bundleData.PackageName; ChangePackage.Add(packageChangeData); } switch (typeEnum) { case TypeEnum.Add: packageChangeData.AddBundles.Add(bundleData); break; case TypeEnum.Remove: packageChangeData.RemoveBundles.Add(bundleData); break; case TypeEnum.Change: packageChangeData.ChangeBundles.Add(bundleData); break; } } public void Processing() { SimpleChangeData = new VersionSimpleChangeData(); long allSize = 0; foreach (var package in ChangePackage) { var name = package.PackageName; var size = package.AddBundles.Sum(b => b.Size) + package.ChangeBundles.Sum(b => b.Size); allSize += size; SimpleChangeData.PackageDownloadSize[name] = size; SimpleChangeData.PackageAddBundle[name] = package.AddBundles.Select(bundle => bundle.Name).ToList(); SimpleChangeData.PackageRemoveBundle[name] = package.RemoveBundles.Select(bundle => bundle.Name).ToList(); SimpleChangeData.PackageChangeBundle[name] = package.ChangeBundles.Select(bundle => bundle.Name).ToList(); } SimpleChangeData.DownloadSize = allSize; } } }