EditorSimulateModeImpl.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. namespace YooAsset
  5. {
  6. internal class EditorSimulateModeImpl : IPlayMode, IBundleQuery
  7. {
  8. private PackageManifest _activeManifest;
  9. private ResourceAssist _assist;
  10. public readonly string PackageName;
  11. public DownloadManager Download
  12. {
  13. get { return _assist.Download; }
  14. }
  15. public EditorSimulateModeImpl(string packageName)
  16. {
  17. PackageName = packageName;
  18. }
  19. /// <summary>
  20. /// 异步初始化
  21. /// </summary>
  22. public InitializationOperation InitializeAsync(ResourceAssist assist, string simulateManifestFilePath)
  23. {
  24. _assist = assist;
  25. var operation = new EditorSimulateModeInitializationOperation(this, simulateManifestFilePath);
  26. OperationSystem.StartOperation(PackageName, operation);
  27. return operation;
  28. }
  29. #region IPlayMode接口
  30. public PackageManifest ActiveManifest
  31. {
  32. set
  33. {
  34. _activeManifest = value;
  35. }
  36. get
  37. {
  38. return _activeManifest;
  39. }
  40. }
  41. public void FlushManifestVersionFile()
  42. {
  43. }
  44. UpdatePackageVersionOperation IPlayMode.UpdatePackageVersionAsync(bool appendTimeTicks, int timeout)
  45. {
  46. var operation = new EditorPlayModeUpdatePackageVersionOperation();
  47. OperationSystem.StartOperation(PackageName, operation);
  48. return operation;
  49. }
  50. UpdatePackageManifestOperation IPlayMode.UpdatePackageManifestAsync(string packageVersion, bool autoSaveVersion, int timeout)
  51. {
  52. var operation = new EditorPlayModeUpdatePackageManifestOperation();
  53. OperationSystem.StartOperation(PackageName, operation);
  54. return operation;
  55. }
  56. PreDownloadContentOperation IPlayMode.PreDownloadContentAsync(string packageVersion, int timeout)
  57. {
  58. var operation = new EditorPlayModePreDownloadContentOperation(this);
  59. OperationSystem.StartOperation(PackageName, operation);
  60. return operation;
  61. }
  62. ResourceDownloaderOperation IPlayMode.CreateResourceDownloaderByAll(int downloadingMaxNumber, int failedTryAgain, int timeout)
  63. {
  64. return ResourceDownloaderOperation.CreateEmptyDownloader(Download, PackageName, downloadingMaxNumber, failedTryAgain, timeout);
  65. }
  66. ResourceDownloaderOperation IPlayMode.CreateResourceDownloaderByTags(string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout)
  67. {
  68. return ResourceDownloaderOperation.CreateEmptyDownloader(Download, PackageName, downloadingMaxNumber, failedTryAgain, timeout);
  69. }
  70. ResourceDownloaderOperation IPlayMode.CreateResourceDownloaderByPaths(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout)
  71. {
  72. return ResourceDownloaderOperation.CreateEmptyDownloader(Download, PackageName, downloadingMaxNumber, failedTryAgain, timeout);
  73. }
  74. ResourceUnpackerOperation IPlayMode.CreateResourceUnpackerByAll(int upackingMaxNumber, int failedTryAgain, int timeout)
  75. {
  76. return ResourceUnpackerOperation.CreateEmptyUnpacker(Download, PackageName, upackingMaxNumber, failedTryAgain, timeout);
  77. }
  78. ResourceUnpackerOperation IPlayMode.CreateResourceUnpackerByTags(string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout)
  79. {
  80. return ResourceUnpackerOperation.CreateEmptyUnpacker(Download, PackageName, upackingMaxNumber, failedTryAgain, timeout);
  81. }
  82. ResourceImporterOperation IPlayMode.CreateResourceImporterByFilePaths(string[] filePaths, int importerMaxNumber, int failedTryAgain, int timeout)
  83. {
  84. return ResourceImporterOperation.CreateEmptyImporter(Download, PackageName, importerMaxNumber, failedTryAgain, timeout);
  85. }
  86. #endregion
  87. #region IBundleQuery接口
  88. private BundleInfo CreateBundleInfo(PackageBundle packageBundle, AssetInfo assetInfo)
  89. {
  90. if (packageBundle == null)
  91. throw new Exception("Should never get here !");
  92. BundleInfo bundleInfo = new BundleInfo(_assist, packageBundle, BundleInfo.ELoadMode.LoadFromEditor);
  93. bundleInfo.IncludeAssetsInEditor = _activeManifest.GetBundleIncludeAssets(assetInfo.AssetPath);
  94. return bundleInfo;
  95. }
  96. BundleInfo IBundleQuery.GetMainBundleInfo(AssetInfo assetInfo)
  97. {
  98. if (assetInfo.IsInvalid)
  99. throw new Exception("Should never get here !");
  100. // 注意:如果清单里未找到资源包会抛出异常!
  101. var packageBundle = _activeManifest.GetMainPackageBundle(assetInfo.AssetPath);
  102. return CreateBundleInfo(packageBundle, assetInfo);
  103. }
  104. BundleInfo[] IBundleQuery.GetDependBundleInfos(AssetInfo assetInfo)
  105. {
  106. if (assetInfo.IsInvalid)
  107. throw new Exception("Should never get here !");
  108. // 注意:如果清单里未找到资源包会抛出异常!
  109. var depends = _activeManifest.GetAllDependencies(assetInfo.AssetPath);
  110. List<BundleInfo> result = new List<BundleInfo>(depends.Length);
  111. foreach (var packageBundle in depends)
  112. {
  113. BundleInfo bundleInfo = CreateBundleInfo(packageBundle, assetInfo);
  114. result.Add(bundleInfo);
  115. }
  116. return result.ToArray();
  117. }
  118. string IBundleQuery.GetMainBundleName(AssetInfo assetInfo)
  119. {
  120. if (assetInfo.IsInvalid)
  121. throw new Exception("Should never get here !");
  122. // 注意:如果清单里未找到资源包会抛出异常!
  123. var packageBundle = _activeManifest.GetMainPackageBundle(assetInfo.AssetPath);
  124. return packageBundle.BundleName;
  125. }
  126. string[] IBundleQuery.GetDependBundleNames(AssetInfo assetInfo)
  127. {
  128. if (assetInfo.IsInvalid)
  129. throw new Exception("Should never get here !");
  130. // 注意:如果清单里未找到资源包会抛出异常!
  131. var depends = _activeManifest.GetAllDependencies(assetInfo.AssetPath);
  132. List<string> result = new List<string>(depends.Length);
  133. foreach (var packageBundle in depends)
  134. {
  135. result.Add(packageBundle.BundleName);
  136. }
  137. return result.ToArray();
  138. }
  139. bool IBundleQuery.ManifestValid()
  140. {
  141. return _activeManifest != null;
  142. }
  143. #endregion
  144. }
  145. }