using XGame.Framework.Asset;
using XGame.Framework.Asset.Addressable.Data;
using System.Text;
using UnityEngine;
namespace XGame.Editor.Asset.Addressable
{
public static class AddressableAssetFoldExt
{
///
/// 按文件夹结构加入一个文件
///
///
///
///
internal static void AddFileWithFold(this AddressableAssetFold asssetFold, AssetInfo assetInfo, System.Func onApply)
{
string path = assetInfo.GetAssetPath();
char separator = '/';
var names = path.Split(separator);
//去掉Assets文件夹和最后的文件名
if (names.Length <= 2)
{
Debug.LogError($"AddFileWithFold Error: Asset is in the wrong path. {assetInfo}");
return;
}
var parent = asssetFold;
StringBuilder builder = new StringBuilder();
builder.Append(names[0]);
for (int i = 1; i < names.Length - 1; i++)
{
builder.Append(separator);
builder.Append(names[i]);
var foldPath = builder.ToString();
var fold = parent.GetChild(foldPath);
if (fold == null)
{
fold = new AddressableAssetFold(foldPath);
parent.AddChild(fold);
}
parent = (AddressableAssetFold)fold;
}
if (parent.Contains(path))
{
Debug.LogError($"AddFileWithFold Repeat. {assetInfo}");
return;
}
var file = new AddressableAssetFile(path, assetInfo)
{
IsFoldout = true
};
file.OnApply += onApply;
parent.AddChild(file);
//Debug.Log($"AddFileWithFold Path: {path}");
}
///
/// 加入一个文件
///
///
///
///
internal static void AddFile(this AddressableAssetFold asssetFold, AssetInfo assetInfo, System.Func onApply, FileSign fileSign)
{
string path = assetInfo.GetAssetPath();
if (string.IsNullOrEmpty(path))
{
Debug.LogWarning($"AddFile {assetInfo}. But can't find assetPath. ");
path = assetInfo.addressableName;
}
var file = new AddressableAssetFile(path, assetInfo)
{
IsFoldout = true,
Sign = fileSign
};
file.OnApply += onApply;
asssetFold.AddChild(file);
//Debug.Log($"AddFile Path: {path}");
}
///
/// 加入失效的文件
///
///
///
///
public static void AddInvalidFile(this AddressableAssetFold asssetFold, AssetInfo assetInfo,
System.Action onRemove)
{
var path = assetInfo.GetAssetPath();
if (string.IsNullOrEmpty(path))
{
//Debug.LogWarning($"{assetInfo} can't find assetPath. ");
path = assetInfo.addressableName;
}
var file = new AddressableAssetFile(path, assetInfo)
{
Sign = FileSign.Invalid
};
if (onRemove != null)
{
file.OnRemove += onRemove;
}
asssetFold.AddChild(file);
//Debug.Log($"AddInvalidFile. {assetInfo}");
}
}
}