using System.Collections.Generic; namespace YooAsset { public sealed class SubAssetsHandle : HandleBase { private System.Action _callback; internal SubAssetsHandle(ProviderOperation 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 IReadOnlyList SubAssetObjects { get { if (IsValidWithWarning == false) return null; return Provider.SubAssetObjects; } } /// /// 获取子资源对象 /// /// 子资源对象类型 /// 子资源对象名称 public TObject GetSubAssetObject(string assetName) where TObject : UnityEngine.Object { if (IsValidWithWarning == false) return null; foreach (var assetObject in Provider.SubAssetObjects) { if (assetObject.name == assetName && assetObject is TObject) 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 result = new List(Provider.SubAssetObjects.Length); foreach (var assetObject in Provider.SubAssetObjects) { var retObject = assetObject as TObject; if (retObject != null) result.Add(retObject); } return result.ToArray(); } } }