SubAssetsHandle.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using System.Collections.Generic;
  2. namespace YooAsset
  3. {
  4. public sealed class SubAssetsHandle : HandleBase
  5. {
  6. private System.Action<SubAssetsHandle> _callback;
  7. internal SubAssetsHandle(ProviderOperation 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<SubAssetsHandle> Completed
  18. {
  19. add
  20. {
  21. if (IsValidWithWarning == false)
  22. throw new System.Exception($"{nameof(SubAssetsHandle)} is invalid");
  23. if (Provider.IsDone)
  24. value.Invoke(this);
  25. else
  26. _callback += value;
  27. }
  28. remove
  29. {
  30. if (IsValidWithWarning == false)
  31. throw new System.Exception($"{nameof(SubAssetsHandle)} is invalid");
  32. _callback -= value;
  33. }
  34. }
  35. /// <summary>
  36. /// 等待异步执行完毕
  37. /// </summary>
  38. public void WaitForAsyncComplete()
  39. {
  40. if (IsValidWithWarning == false)
  41. return;
  42. Provider.WaitForAsyncComplete();
  43. }
  44. /// <summary>
  45. /// 子资源对象集合
  46. /// </summary>
  47. public IReadOnlyList<UnityEngine.Object> SubAssetObjects
  48. {
  49. get
  50. {
  51. if (IsValidWithWarning == false)
  52. return null;
  53. return Provider.SubAssetObjects;
  54. }
  55. }
  56. /// <summary>
  57. /// 获取子资源对象
  58. /// </summary>
  59. /// <typeparam name="TObject">子资源对象类型</typeparam>
  60. /// <param name="assetName">子资源对象名称</param>
  61. public TObject GetSubAssetObject<TObject>(string assetName) where TObject : UnityEngine.Object
  62. {
  63. if (IsValidWithWarning == false)
  64. return null;
  65. foreach (var assetObject in Provider.SubAssetObjects)
  66. {
  67. if (assetObject.name == assetName && assetObject is TObject)
  68. return assetObject as TObject;
  69. }
  70. YooLogger.Warning($"Not found sub asset object : {assetName}");
  71. return null;
  72. }
  73. /// <summary>
  74. /// 获取所有的子资源对象集合
  75. /// </summary>
  76. /// <typeparam name="TObject">子资源对象类型</typeparam>
  77. public TObject[] GetSubAssetObjects<TObject>() where TObject : UnityEngine.Object
  78. {
  79. if (IsValidWithWarning == false)
  80. return null;
  81. List<TObject> result = new List<TObject>(Provider.SubAssetObjects.Length);
  82. foreach (var assetObject in Provider.SubAssetObjects)
  83. {
  84. var retObject = assetObject as TObject;
  85. if (retObject != null)
  86. result.Add(retObject);
  87. }
  88. return result.ToArray();
  89. }
  90. }
  91. }