SubAssetsOperationHandle.cs 2.6 KB

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