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
128 lines
3.1 KiB
3 years ago
|
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);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|