using System.Collections.Generic; using System.Linq; using UnityEditor; namespace NBC.Asset.Editor { public class BuildContext { public List Assets = new List(); public List Bundles = new List(); public List Packages = new List(); public void Add(GroupConfig groupConfig, List assets) { foreach (var asset in assets) { asset.Group = groupConfig; AddOrUpdate(asset); } } public void AddOrUpdate(BuildAsset asset) { Assets.Add(asset); } public void AddBundle(BuildBundle bundle) { Bundles.Add(bundle); } public BuildBundle GetBundle(string name) { return Bundles.FirstOrDefault(bundle => bundle.Name == name); } public List GenBundles() { Bundles.Clear(); Dictionary dictionary = new Dictionary(); foreach (var asset in Assets) { if (!dictionary.TryGetValue(asset.Bundle, out var bundle)) { bundle = new BuildBundle { Name = asset.Bundle, Tags = asset.Tags }; dictionary[bundle.Name] = bundle; } bundle.AddAsset(asset); } foreach (var bundle in dictionary.Values) { AddBundle(bundle); } return Bundles; } public void SaveAssets() { var cache = Caches.Get(); cache.ClearAssets(); cache.AddOrUpdate(Assets); cache.Save(); } public void SaveBundles() { var cache = Caches.Get(); cache.ClearBundles(); cache.AddOrUpdate(Bundles); cache.Save(); } public List GetAssetBundleBuilds() { List builds = new List(); for (int i = 0; i < Bundles.Count; i++) { var bundle = Bundles[i]; var build = new AssetBundleBuild { assetNames = bundle.GetAssetNames(), assetBundleName = bundle.Name }; builds.Add(build); } return builds; } } }