Files
FlowScope/Packages/com.flowscope.gamecore/Runtime/Resources/ResourceHandle.cs
2026-06-04 14:54:49 +08:00

52 lines
1.4 KiB
C#

using System;
namespace FlowScope.Resources
{
public sealed class ResourceHandle<T> : IResourceHandle<T> where T : class
{
private readonly ResourceEntry _entry;
private readonly Action<string, object> _release;
private T _asset;
internal ResourceHandle(ResourceEntry entry)
{
_entry = entry ?? throw new ArgumentNullException(nameof(entry));
Key = entry.Key;
_asset = (T)entry.Asset;
}
public ResourceHandle(string key, T asset, Action<string, object> release)
{
Key = string.IsNullOrWhiteSpace(key)
? throw new ArgumentException("Resource key is required.", nameof(key))
: key;
_asset = asset ?? throw new ArgumentNullException(nameof(asset));
_release = release ?? throw new ArgumentNullException(nameof(release));
}
public string Key { get; }
public T Asset => IsDisposed ? null : _asset;
public bool IsDisposed { get; private set; }
public void Dispose()
{
if (IsDisposed)
{
return;
}
IsDisposed = true;
var asset = _asset;
_asset = null;
if (_entry != null)
{
_entry.ReleaseHandle();
return;
}
_release(Key, asset);
}
}
}