SubAssetsOperationHandle.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using System.Collections.Generic;
  2. namespace YooAsset
  3. {
  4. public sealed class SubAssetsOperationHandle : OperationHandleBase
  5. {
  6. private System.Action<SubAssetsOperationHandle> _callback;
  7. internal SubAssetsOperationHandle(ProviderBase provider) : base(provider)
  8. {
  9. }
  10. internal override void InvokeCallback()
  11. {
  12. _callback?.Invoke(this);
  13. }
  14. /// <summary>
  15. /// 完成委托
  16. /// </summary>
  17. public event System.Action<SubAssetsOperationHandle> Completed
  18. {
  19. add
  20. {
  21. if (IsValid == false)
  22. throw new System.Exception($"{nameof(SubAssetsOperationHandle)} is invalid");
  23. if (Provider.IsDone)
  24. value.Invoke(this);
  25. else
  26. _callback += value;
  27. }
  28. remove
  29. {
  30. if (IsValid == false)
  31. throw new System.Exception($"{nameof(SubAssetsOperationHandle)} is invalid");
  32. _callback -= value;
  33. }
  34. }
  35. /// <summary>
  36. /// 子资源对象集合
  37. /// </summary>
  38. public UnityEngine.Object[] AllAssetObjects
  39. {
  40. get
  41. {
  42. if (IsValid == false)
  43. return null;
  44. return Provider.AllAssetObjects;
  45. }
  46. }
  47. /// <summary>
  48. /// 等待异步执行完毕
  49. /// </summary>
  50. public void WaitForAsyncComplete()
  51. {
  52. if (IsValid == false)
  53. return;
  54. Provider.WaitForAsyncComplete();
  55. }
  56. /// <summary>
  57. /// 释放资源句柄
  58. /// </summary>
  59. public void Release()
  60. {
  61. this.ReleaseInternal();
  62. }
  63. /// <summary>
  64. /// 获取子资源对象
  65. /// </summary>
  66. /// <typeparam name="TObject">子资源对象类型</typeparam>
  67. /// <param name="assetName">子资源对象名称</param>
  68. public TObject GetSubAssetObject<TObject>(string assetName) where TObject : UnityEngine.Object
  69. {
  70. if (IsValid == false)
  71. return null;
  72. foreach (var assetObject in Provider.AllAssetObjects)
  73. {
  74. if (assetObject.name == assetName)
  75. return assetObject as TObject;
  76. }
  77. YooLogger.Warning($"Not found sub asset object : {assetName}");
  78. return null;
  79. }
  80. /// <summary>
  81. /// 获取所有的子资源对象集合
  82. /// </summary>
  83. /// <typeparam name="TObject">子资源对象类型</typeparam>
  84. public TObject[] GetSubAssetObjects<TObject>() where TObject : UnityEngine.Object
  85. {
  86. if (IsValid == false)
  87. return null;
  88. List<TObject> ret = new List<TObject>(Provider.AllAssetObjects.Length);
  89. foreach (var assetObject in Provider.AllAssetObjects)
  90. {
  91. var retObject = assetObject as TObject;
  92. if (retObject != null)
  93. ret.Add(retObject);
  94. else
  95. YooLogger.Warning($"The type conversion failed : {assetObject.name}");
  96. }
  97. return ret.ToArray();
  98. }
  99. }
  100. }