using System; using System.Linq; using System.Collections; using System.Collections.Generic; using UnityEditor; namespace YooAsset.Editor { public class BuildMapContext : IContextObject { /// /// 资源包集合 /// private readonly Dictionary _bundleInfoDic = new Dictionary(10000); /// /// 未被依赖的资源列表 /// public readonly List IndependAssets = new List(1000); /// /// 参与构建的资源总数 /// 说明:包括主动收集的资源以及其依赖的所有资源 /// public int AssetFileCount; /// /// 资源收集命令 /// public CollectCommand Command { set; get; } /// /// 资源包信息列表 /// public Dictionary.ValueCollection Collection { get { return _bundleInfoDic.Values; } } /// /// 添加一个打包资源 /// public void PackAsset(BuildAssetInfo assetInfo) { string bundleName = assetInfo.BundleName; if (string.IsNullOrEmpty(bundleName)) throw new Exception("Should never get here !"); if (_bundleInfoDic.TryGetValue(bundleName, out BuildBundleInfo bundleInfo)) { bundleInfo.PackAsset(assetInfo); } else { BuildBundleInfo newBundleInfo = new BuildBundleInfo(bundleName); newBundleInfo.PackAsset(assetInfo); _bundleInfoDic.Add(bundleName, newBundleInfo); } } /// /// 是否包含资源包 /// public bool IsContainsBundle(string bundleName) { return _bundleInfoDic.ContainsKey(bundleName); } /// /// 获取资源包信息,如果没找到返回NULL /// public BuildBundleInfo GetBundleInfo(string bundleName) { if (_bundleInfoDic.TryGetValue(bundleName, out BuildBundleInfo result)) { return result; } throw new Exception($"Should never get here ! Not found bundle : {bundleName}"); } /// /// 获取构建管线里需要的数据 /// public UnityEditor.AssetBundleBuild[] GetPipelineBuilds() { List builds = new List(_bundleInfoDic.Count); foreach (var bundleInfo in _bundleInfoDic.Values) { builds.Add(bundleInfo.CreatePipelineBuild()); } return builds.ToArray(); } /// /// 创建空的资源包 /// public void CreateEmptyBundleInfo(string bundleName) { if (IsContainsBundle(bundleName) == false) { var bundleInfo = new BuildBundleInfo(bundleName); _bundleInfoDic.Add(bundleName, bundleInfo); } } } }