using System; using System.Collections.Generic; namespace YooAsset { public sealed class SubAssetsHandle : HandleBase, IDisposable { private System.Action _callback; internal SubAssetsHandle(ProviderBase provider) : base(provider) { } internal override void InvokeCallback() { _callback?.Invoke(this); } /// /// 完成委托 /// public event System.Action Completed { add { if (IsValidWithWarning == false) throw new System.Exception($"{nameof(SubAssetsHandle)} is invalid"); if (Provider.IsDone) value.Invoke(this); else _callback += value; } remove { if (IsValidWithWarning == false) throw new System.Exception($"{nameof(SubAssetsHandle)} is invalid"); _callback -= value; } } /// /// 等待异步执行完毕 /// public void WaitForAsyncComplete() { if (IsValidWithWarning == false) return; Provider.WaitForAsyncComplete(); } /// /// 释放资源句柄 /// public void Release() { this.ReleaseInternal(); } /// /// 释放资源句柄 /// public void Dispose() { this.ReleaseInternal(); } /// /// 子资源对象集合 /// public UnityEngine.Object[] AllAssetObjects { get { if (IsValidWithWarning == false) return null; return Provider.AllAssetObjects; } } /// /// 获取子资源对象 /// /// 子资源对象类型 /// 子资源对象名称 public TObject GetSubAssetObject(string assetName) where TObject : UnityEngine.Object { if (IsValidWithWarning == false) return null; foreach (var assetObject in Provider.AllAssetObjects) { if (assetObject.name == assetName) return assetObject as TObject; } YooLogger.Warning($"Not found sub asset object : {assetName}"); return null; } /// /// 获取所有的子资源对象集合 /// /// 子资源对象类型 public TObject[] GetSubAssetObjects() where TObject : UnityEngine.Object { if (IsValidWithWarning == false) return null; List ret = new List(Provider.AllAssetObjects.Length); foreach (var assetObject in Provider.AllAssetObjects) { var retObject = assetObject as TObject; if (retObject != null) ret.Add(retObject); } return ret.ToArray(); } } }