You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.1 KiB
127 lines
3.1 KiB
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<UnityEngine.Object> objects)) |
|
{ |
|
objects = new List<UnityEngine.Object>(); |
|
} |
|
|
|
string uiDesName = self.GetDesName(name); |
|
var pkgTextAsset = YooAssetWrapper.LoadAssetSync<TextAsset>(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<UnityEngine.Object> objects)) |
|
{ |
|
objects = new List<UnityEngine.Object>(); |
|
} |
|
|
|
string uiDesName = self.GetDesName(name); |
|
var pkgTextAsset = await YooAssetWrapper.LoadAssetAsync<TextAsset>(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<UnityEngine.Object> objects)) |
|
{ |
|
foreach (UnityEngine.Object obj in objects) |
|
{ |
|
YooAssetWrapper.Release(obj); |
|
} |
|
|
|
self.PackageAssetObject.Remove(name); |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|