OperationHandleBase.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. using System.Collections;
  2. namespace YooAsset
  3. {
  4. public abstract class OperationHandleBase : IEnumerator
  5. {
  6. private readonly AssetInfo _assetInfo;
  7. internal ProviderBase Provider { private set; get; }
  8. internal OperationHandleBase(ProviderBase provider)
  9. {
  10. Provider = provider;
  11. _assetInfo = provider.MainAssetInfo;
  12. }
  13. internal abstract void InvokeCallback();
  14. /// <summary>
  15. /// 获取资源信息
  16. /// </summary>
  17. public AssetInfo GetAssetInfo()
  18. {
  19. return _assetInfo;
  20. }
  21. /// <summary>
  22. /// 当前状态
  23. /// </summary>
  24. public EOperationStatus Status
  25. {
  26. get
  27. {
  28. if (IsValid == false)
  29. return EOperationStatus.None;
  30. if (Provider.Status == ProviderBase.EStatus.Fail)
  31. return EOperationStatus.Failed;
  32. else if (Provider.Status == ProviderBase.EStatus.Success)
  33. return EOperationStatus.Succeed;
  34. else
  35. return EOperationStatus.None;
  36. }
  37. }
  38. /// <summary>
  39. /// 最近的错误信息
  40. /// </summary>
  41. public string LastError
  42. {
  43. get
  44. {
  45. if (IsValid == false)
  46. return string.Empty;
  47. return Provider.LastError;
  48. }
  49. }
  50. /// <summary>
  51. /// 加载进度
  52. /// </summary>
  53. public float Progress
  54. {
  55. get
  56. {
  57. if (IsValid == false)
  58. return 0;
  59. return Provider.Progress;
  60. }
  61. }
  62. /// <summary>
  63. /// 是否加载完毕
  64. /// </summary>
  65. public bool IsDone
  66. {
  67. get
  68. {
  69. if (IsValid == false)
  70. return false;
  71. return Provider.IsDone;
  72. }
  73. }
  74. /// <summary>
  75. /// 句柄是否有效
  76. /// </summary>
  77. public bool IsValid
  78. {
  79. get
  80. {
  81. if (Provider != null && Provider.IsDestroyed == false)
  82. {
  83. return true;
  84. }
  85. else
  86. {
  87. if (Provider == null)
  88. YooLogger.Warning($"Operation handle is released : {_assetInfo.AssetPath}");
  89. else if (Provider.IsDestroyed)
  90. YooLogger.Warning($"Provider is destroyed : {_assetInfo.AssetPath}");
  91. return false;
  92. }
  93. }
  94. }
  95. /// <summary>
  96. /// 句柄是否有效
  97. /// </summary>
  98. public bool IsValidNoWarning
  99. {
  100. get
  101. {
  102. if (Provider != null && Provider.IsDestroyed == false)
  103. return true;
  104. else
  105. return false;
  106. }
  107. }
  108. /// <summary>
  109. /// 释放句柄
  110. /// </summary>
  111. internal void ReleaseInternal()
  112. {
  113. if (IsValid == false)
  114. return;
  115. Provider.ReleaseHandle(this);
  116. Provider = null;
  117. }
  118. #region 异步操作相关
  119. /// <summary>
  120. /// 异步操作任务
  121. /// </summary>
  122. public System.Threading.Tasks.Task Task
  123. {
  124. get { return Provider.Task; }
  125. }
  126. // 协程相关
  127. bool IEnumerator.MoveNext()
  128. {
  129. return !IsDone;
  130. }
  131. void IEnumerator.Reset()
  132. {
  133. }
  134. object IEnumerator.Current
  135. {
  136. get { return Provider; }
  137. }
  138. #endregion
  139. }
  140. }