using System.Buffers; using System.Collections.Generic; using AlicizaX.ObjectPool; using AlicizaX; using YooAsset; namespace AlicizaX.Resource.Runtime { internal partial class ResourceModule { /// /// 资源对象。 /// private sealed class AssetObject : ObjectBase { private AssetHandle m_AssetHandle; private ResourceModule _mResourceModule; public AssetObject() { m_AssetHandle = null; } public static AssetObject Create(string name, object target, object assetHandle, ResourceModule resourceModule) { if (assetHandle == null) { throw new GameFrameworkException("Resource is invalid."); } if (resourceModule == null) { throw new GameFrameworkException("Resource Manager is invalid."); } AssetObject assetObject = MemoryPool.Acquire(); assetObject.Initialize(name, target); assetObject.m_AssetHandle = (AssetHandle)assetHandle; assetObject._mResourceModule = resourceModule; return assetObject; } public override void Clear() { base.Clear(); m_AssetHandle = null; } protected override void OnUnspawn() { base.OnUnspawn(); } protected override void Release(bool isShutdown) { if (!isShutdown) { AssetHandle handle = m_AssetHandle; if (handle is { IsValid: true }) { handle.Dispose(); } handle = null; } } } } }