mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
Update AssetGroup.cs
This commit is contained in:
@@ -16,6 +16,11 @@ namespace TEngine
|
||||
/// </summary>
|
||||
private AssetOperationHandle _handle;
|
||||
|
||||
/// <summary>
|
||||
/// 资源操作句柄。
|
||||
/// </summary>
|
||||
public AssetOperationHandle Handle => _handle;
|
||||
|
||||
/// <summary>
|
||||
/// 标签。
|
||||
/// </summary>
|
||||
@@ -42,7 +47,7 @@ namespace TEngine
|
||||
/// <param name="handle">资源操作句柄。</param>
|
||||
/// <param name="tag">标签。</param>
|
||||
/// <returns>资源句柄数据。</returns>
|
||||
public static AssetHandleData Alloc(AssetOperationHandle handle, string tag)
|
||||
public static AssetHandleData Alloc(AssetOperationHandle handle, string tag = "")
|
||||
{
|
||||
AssetHandleData assetHandleData = MemoryPool.Acquire<AssetHandleData>();
|
||||
assetHandleData._handle = handle;
|
||||
@@ -67,12 +72,12 @@ namespace TEngine
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 资源分组数据。
|
||||
/// 资源组数据。
|
||||
/// <remarks>DisposeGroup。</remarks>
|
||||
/// </summary>
|
||||
public class AssetGroup : IMemory
|
||||
{
|
||||
private Dictionary<string, AssetHandleData> _handles = new Dictionary<string, AssetHandleData>(16);
|
||||
private GameFrameworkLinkedList<AssetHandleData> _assetHandleDataLinkedList = new GameFrameworkLinkedList<AssetHandleData>();
|
||||
|
||||
/// <summary>
|
||||
/// 注册资源数据到资源组内。
|
||||
@@ -80,17 +85,10 @@ namespace TEngine
|
||||
/// <param name="handle">资源操作句柄。</param>
|
||||
/// <param name="tag">资源标识。</param>
|
||||
/// <returns>是否注册成功。</returns>
|
||||
public bool Register(AssetOperationHandle handle, string tag = "ROOT")
|
||||
public bool Register(AssetOperationHandle handle,string tag = "")
|
||||
{
|
||||
if (_handles.TryGetValue(tag, out var handleData))
|
||||
{
|
||||
_handles.Remove(tag);
|
||||
AssetHandleData.Release(handleData);
|
||||
handleData = null;
|
||||
}
|
||||
|
||||
handleData = AssetHandleData.Alloc(handle, tag);
|
||||
_handles.Add(tag, handleData);
|
||||
AssetHandleData handleData = AssetHandleData.Alloc(handle);
|
||||
_assetHandleDataLinkedList.AddLast(handleData);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -101,28 +99,66 @@ namespace TEngine
|
||||
/// <returns></returns>
|
||||
public bool UnRegister(string tag)
|
||||
{
|
||||
if (_handles.TryGetValue(tag, out var handleData))
|
||||
AssetHandleData founded = null;
|
||||
foreach (var assetHandleData in _assetHandleDataLinkedList)
|
||||
{
|
||||
_handles.Remove(tag);
|
||||
AssetHandleData.Release(handleData);
|
||||
if (assetHandleData.Tag == tag)
|
||||
{
|
||||
founded = assetHandleData;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (founded != null)
|
||||
{
|
||||
_assetHandleDataLinkedList.Remove(founded);
|
||||
AssetHandleData.Release(founded);
|
||||
return true;
|
||||
}
|
||||
|
||||
Log.Warning($"UnRegister AssetHandleData Tag:{tag} Failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从资源组内反注册资源数据。
|
||||
/// </summary>
|
||||
/// <param name="handle"></param>
|
||||
/// <returns></returns>
|
||||
public bool UnRegister(AssetOperationHandle handle)
|
||||
{
|
||||
AssetHandleData founded = null;
|
||||
foreach (var assetHandleData in _assetHandleDataLinkedList)
|
||||
{
|
||||
if (assetHandleData.Handle == handle)
|
||||
{
|
||||
founded = assetHandleData;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (founded != null)
|
||||
{
|
||||
_assetHandleDataLinkedList.Remove(founded);
|
||||
AssetHandleData.Release(founded);
|
||||
return true;
|
||||
}
|
||||
|
||||
Log.Warning($"UnRegister AssetHandleData Handle:{handle} Failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
var etr = _handles.GetEnumerator();
|
||||
var etr = _assetHandleDataLinkedList.GetEnumerator();
|
||||
while (etr.MoveNext())
|
||||
{
|
||||
AssetHandleData assetHandleData = etr.Current.Value;
|
||||
AssetHandleData assetHandleData = etr.Current;
|
||||
AssetHandleData.Release(assetHandleData);
|
||||
}
|
||||
|
||||
etr.Dispose();
|
||||
_handles.Clear();
|
||||
_assetHandleDataLinkedList.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -158,7 +194,7 @@ namespace TEngine
|
||||
/// <param name="tag">要加载资源的标签名称。</param>
|
||||
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
||||
/// <returns>资源实例。</returns>
|
||||
public T LoadAsset<T>(string assetName, string tag) where T : Object
|
||||
public T LoadAsset<T>(string assetName) where T : Object
|
||||
{
|
||||
if (string.IsNullOrEmpty(assetName))
|
||||
{
|
||||
@@ -168,7 +204,7 @@ namespace TEngine
|
||||
|
||||
AssetOperationHandle handle = YooAssets.LoadAssetSync<T>(assetName);
|
||||
|
||||
Register(handle, tag);
|
||||
Register(handle);
|
||||
|
||||
if (typeof(T) == typeof(GameObject))
|
||||
{
|
||||
@@ -189,7 +225,7 @@ namespace TEngine
|
||||
/// <param name="tag">要加载资源的标签名称。</param>
|
||||
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
||||
/// <returns>资源实例。</returns>
|
||||
public T LoadAsset<T>(string assetName, Transform parent, string tag) where T : Object
|
||||
public T LoadAsset<T>(string assetName, Transform parent) where T : Object
|
||||
{
|
||||
if (string.IsNullOrEmpty(assetName))
|
||||
{
|
||||
@@ -199,7 +235,7 @@ namespace TEngine
|
||||
|
||||
AssetOperationHandle handle = YooAssets.LoadAssetSync<T>(assetName);
|
||||
|
||||
Register(handle, tag);
|
||||
Register(handle);
|
||||
|
||||
if (typeof(T) == typeof(GameObject))
|
||||
{
|
||||
@@ -219,17 +255,17 @@ namespace TEngine
|
||||
/// <param name="tag">要加载资源的标签名称。</param>
|
||||
/// <param name="cancellationToken">取消操作Token。</param>
|
||||
/// <returns>资源实实例。</returns>
|
||||
public async UniTask<T> LoadAssetAsync<T>(string assetName, string tag, CancellationToken cancellationToken) where T : Object
|
||||
public async UniTask<T> LoadAssetAsync<T>(string assetName, CancellationToken cancellationToken) where T : Object
|
||||
{
|
||||
AssetOperationHandle handle = GameModule.Resource.LoadAssetAsyncHandle<GameObject>(assetName);
|
||||
|
||||
Register(handle, tag);
|
||||
Register(handle);
|
||||
|
||||
bool cancelOrFailed = await handle.ToUniTask(cancellationToken: cancellationToken).SuppressCancellationThrow();
|
||||
|
||||
if (cancelOrFailed)
|
||||
{
|
||||
UnRegister(tag);
|
||||
UnRegister(handle);
|
||||
|
||||
return null;
|
||||
}
|
||||
@@ -244,17 +280,17 @@ namespace TEngine
|
||||
/// <param name="tag">要加载资源的标签名称。</param>
|
||||
/// <param name="cancellationToken">取消操作Token。</param>
|
||||
/// <returns>异步游戏物体实例。</returns>
|
||||
public async UniTask<GameObject> LoadGameObjectAsync(string assetName, string tag, CancellationToken cancellationToken)
|
||||
public async UniTask<GameObject> LoadGameObjectAsync(string assetName, CancellationToken cancellationToken)
|
||||
{
|
||||
AssetOperationHandle handle = GameModule.Resource.LoadAssetAsyncHandle<GameObject>(assetName);
|
||||
|
||||
Register(handle, tag);
|
||||
Register(handle);
|
||||
|
||||
bool cancelOrFailed = await handle.ToUniTask(cancellationToken: cancellationToken).SuppressCancellationThrow();
|
||||
|
||||
if (cancelOrFailed)
|
||||
{
|
||||
UnRegister(tag);
|
||||
UnRegister(handle);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
Reference in New Issue
Block a user