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.

128 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);
}
}
}
}
}