using System; using System.Collections.Generic; using FairyGUI; using UnityEngine; using System.Threading.Tasks; using YooAsset; namespace ET { [FriendClass(typeof(FUIPackageComponent))] public static class FUIPackageComponentSystem { public static string GetDesName(this FUIPackageComponent self, string name) { return $"{name}_fui"; } public static string GetResName(this FUIPackageComponent self, string name) { return $"{name}_fui_res"; } public static void AddPackage(this FUIPackageComponent self, string name) { if (self.Packages.ContainsKey(name)) { return; } if (Define.IsEditor) { UIPackage uiPackage = UIPackage.AddPackage($"{FUIPackageComponent.FUI_PACKAGE_DIR}/{name}"); self.Packages.Add(name, uiPackage); } else { if (!self.PackageAssetObject.TryGetValue(name, out List objects)) { objects = new List(); } string uiDesName = self.GetDesName(name); var pkgTextAsset = YooAssetWrapper.LoadAssetSync(uiDesName); objects.Add(pkgTextAsset); UIPackage uiPackage = FUIWrapper.AddPakageSync(pkgTextAsset.bytes, name, asset => { if (asset != null) { objects.Add(asset); } }); self.Packages.Add(name, uiPackage); } } public static async ETTask AddPackageAsync(this FUIPackageComponent self, string name) { if (self.Packages.ContainsKey(name)) { return; } if (Define.IsEditor) { UIPackage uiPackage = UIPackage.AddPackage($"{FUIPackageComponent.FUI_PACKAGE_DIR}/{name}"); self.Packages.Add(name, uiPackage); await ETTask.CompletedTask; } else { if (!self.PackageAssetObject.TryGetValue(name, out List objects)) { objects = new List(); } string uiDesName = self.GetDesName(name); var pkgTextAsset = await YooAssetWrapper.LoadAssetAsync(uiDesName); objects.Add(pkgTextAsset); UIPackage uiPackage = UIPackage.AddPackage(pkgTextAsset.bytes, name, async (string assetName, string extension, Type type, PackageItem item) => { string location = $"{assetName}"; var asset = await YooAssetWrapper.LoadAssetAsync(location, type); if (asset != null) { objects.Add(asset); item.owner.SetItemAsset(item, asset, DestroyMethod.None); } }); self.Packages.Add(name, uiPackage); } } public static void RemovePackage(this FUIPackageComponent self, string name) { UIPackage package; if (self.Packages.TryGetValue(name, out package)) { var p = UIPackage.GetByName(package.name); if (p != null) { UIPackage.RemovePackage(package.name); } self.Packages.Remove(package.name); } if (!Define.IsEditor) { if (self.PackageAssetObject.TryGetValue(name, out List objects)) { foreach (UnityEngine.Object obj in objects) { YooAssetWrapper.Release(obj); } self.PackageAssetObject.Remove(name); } } } } }