OpenWindowOperation.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using YooAsset;
  2. namespace UniFramework.Window
  3. {
  4. public class OpenWindowOperation : GameAsyncOperation
  5. {
  6. private enum ESteps
  7. {
  8. None,
  9. Waiting,
  10. Done,
  11. }
  12. private readonly AssetOperationHandle _handle;
  13. private ESteps _steps = ESteps.None;
  14. internal OpenWindowOperation(AssetOperationHandle handle)
  15. {
  16. _handle = handle;
  17. }
  18. protected override void OnStart()
  19. {
  20. _steps = ESteps.Waiting;
  21. }
  22. protected override void OnUpdate()
  23. {
  24. if (_steps == ESteps.None || _steps == ESteps.Done)
  25. return;
  26. if (_steps == ESteps.Waiting)
  27. {
  28. if (_handle.IsValid == false)
  29. {
  30. _steps = ESteps.Done;
  31. Status = EOperationStatus.Failed;
  32. Error = $"{nameof(AssetOperationHandle)} is invalid.";
  33. return;
  34. }
  35. if (_handle.IsDone == false)
  36. return;
  37. if (_handle.AssetObject == null)
  38. {
  39. _steps = ESteps.Done;
  40. Status = EOperationStatus.Failed;
  41. Error = $"{nameof(AssetOperationHandle.AssetObject)} is null.";
  42. return;
  43. }
  44. _steps = ESteps.Done;
  45. Status = EOperationStatus.Succeed;
  46. }
  47. }
  48. /// <summary>
  49. /// 等待异步实例化结束
  50. /// </summary>
  51. public void WaitForAsyncComplete()
  52. {
  53. if (_handle != null)
  54. {
  55. if (_steps == ESteps.Done)
  56. return;
  57. _handle.WaitForAsyncComplete();
  58. OnUpdate();
  59. }
  60. }
  61. }
  62. }