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