LoadBuildinManifestOperation.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. 
  2. namespace YooAsset
  3. {
  4. internal class LoadBuildinManifestOperation : AsyncOperationBase
  5. {
  6. private enum ESteps
  7. {
  8. None,
  9. LoadBuildinManifest,
  10. CheckDeserializeManifest,
  11. Done,
  12. }
  13. private readonly string _buildinPackageName;
  14. private readonly string _buildinPackageVersion;
  15. private UnityWebDataRequester _downloader;
  16. private DeserializeManifestOperation _deserializer;
  17. private ESteps _steps = ESteps.None;
  18. /// <summary>
  19. /// 加载的清单实例
  20. /// </summary>
  21. public PackageManifest Manifest { private set; get; }
  22. public LoadBuildinManifestOperation(string buildinPackageName, string buildinPackageVersion)
  23. {
  24. _buildinPackageName = buildinPackageName;
  25. _buildinPackageVersion = buildinPackageVersion;
  26. }
  27. internal override void Start()
  28. {
  29. _steps = ESteps.LoadBuildinManifest;
  30. }
  31. internal override void Update()
  32. {
  33. if (_steps == ESteps.None || _steps == ESteps.Done)
  34. return;
  35. if (_steps == ESteps.LoadBuildinManifest)
  36. {
  37. if (_downloader == null)
  38. {
  39. string filePath = PersistentTools.GetPersistent(_buildinPackageName).GetBuildinPackageManifestFilePath(_buildinPackageVersion);
  40. string url = PersistentTools.ConvertToWWWPath(filePath);
  41. _downloader = new UnityWebDataRequester();
  42. _downloader.SendRequest(url);
  43. }
  44. if (_downloader.IsDone() == false)
  45. return;
  46. if (_downloader.HasError())
  47. {
  48. _steps = ESteps.Done;
  49. Status = EOperationStatus.Failed;
  50. Error = _downloader.GetError();
  51. }
  52. else
  53. {
  54. byte[] bytesData = _downloader.GetData();
  55. _deserializer = new DeserializeManifestOperation(bytesData);
  56. OperationSystem.StartOperation(_deserializer);
  57. _steps = ESteps.CheckDeserializeManifest;
  58. }
  59. _downloader.Dispose();
  60. }
  61. if (_steps == ESteps.CheckDeserializeManifest)
  62. {
  63. Progress = _deserializer.Progress;
  64. if (_deserializer.IsDone == false)
  65. return;
  66. if (_deserializer.Status == EOperationStatus.Succeed)
  67. {
  68. Manifest = _deserializer.Manifest;
  69. _steps = ESteps.Done;
  70. Status = EOperationStatus.Succeed;
  71. }
  72. else
  73. {
  74. _steps = ESteps.Done;
  75. Status = EOperationStatus.Failed;
  76. Error = _deserializer.Error;
  77. }
  78. }
  79. }
  80. }
  81. }