bd21ad9b63d9e3cba9431abca9625ce120a237d7.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  1. System.register(["cc"], function (_export, _context) {
  2. "use strict";
  3. var _cclegacy, __checkObsolete__, __checkObsoleteInNamespace__, Asset, assetManager, error, js, resources, warn, ResLoader, _crd, resLoader;
  4. function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
  5. function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
  6. _export("ResLoader", void 0);
  7. return {
  8. setters: [function (_cc) {
  9. _cclegacy = _cc.cclegacy;
  10. __checkObsolete__ = _cc.__checkObsolete__;
  11. __checkObsoleteInNamespace__ = _cc.__checkObsoleteInNamespace__;
  12. Asset = _cc.Asset;
  13. assetManager = _cc.assetManager;
  14. error = _cc.error;
  15. js = _cc.js;
  16. resources = _cc.resources;
  17. warn = _cc.warn;
  18. }],
  19. execute: function () {
  20. _crd = true;
  21. _cclegacy._RF.push({}, "1a2e4jFffpHrYjrpxbnC760", "ResLoader", undefined);
  22. __checkObsolete__(['Asset', 'AssetManager', '__private', 'assetManager', 'error', 'js', 'resources', 'warn']);
  23. /**
  24. * 游戏资源管理
  25. * 1、加载默认resources文件夹中资源
  26. * 2、加载默认bundle远程资源
  27. * 3、主动传递bundle名时,优先加载传递bundle名资源包中的资源
  28. *
  29. * @help https://gitee.com/dgflash/oops-framework/wikis/pages?sort_id=12037901&doc_id=2873565
  30. */
  31. _export("ResLoader", ResLoader = class ResLoader {
  32. constructor() {
  33. //#region 资源配置数据
  34. /** 全局默认加载的资源包名 */
  35. this.defaultBundleName = "resources";
  36. /** 是否使用远程 CDN 资源 */
  37. this.cdn = false;
  38. /** 资源包配置 */
  39. this.bundles = new Map();
  40. }
  41. /** 下载时的最大并发数 - 项目设置 -> 项目数据 -> 资源下载并发数,设置默认值;初始值为15 */
  42. get maxConcurrency() {
  43. return assetManager.downloader.maxConcurrency;
  44. }
  45. set maxConcurrency(value) {
  46. assetManager.downloader.maxConcurrency = value;
  47. }
  48. /** 下载时每帧可以启动的最大请求数 - 默认值为15 */
  49. get maxRequestsPerFrame() {
  50. return assetManager.downloader.maxRequestsPerFrame;
  51. }
  52. set maxRequestsPerFrame(value) {
  53. assetManager.downloader.maxRequestsPerFrame = value;
  54. }
  55. /** 失败重试次数 - 默认值为0 */
  56. get maxRetryCount() {
  57. return assetManager.downloader.maxRetryCount;
  58. }
  59. set maxRetryCount(value) {
  60. assetManager.downloader.maxRetryCount = value;
  61. }
  62. /** 重试的间隔时间,单位为毫秒 - 默认值为2000毫秒 */
  63. get retryInterval() {
  64. return assetManager.downloader.retryInterval;
  65. }
  66. set retryInterval(value) {
  67. assetManager.downloader.retryInterval = value;
  68. }
  69. //#endregion
  70. init(config) {
  71. this.cdn = config.enable;
  72. for (var _bundleName in config.packages) {
  73. this.bundles.set(_bundleName, config.packages[_bundleName]);
  74. }
  75. } //#region 加载远程资源
  76. /**
  77. * 加载远程资源
  78. * @param url 资源地址
  79. * @param options 资源参数,例:{ ext: ".png" }
  80. * @param onComplete 加载完成回调
  81. * @example
  82. var opt: IRemoteOptions = { ext: ".png" };
  83. var onComplete = (err: Error | null, data: ImageAsset) => {
  84. const texture = new Texture2D();
  85. texture.image = data;
  86. const spriteFrame = new SpriteFrame();
  87. spriteFrame.texture = texture;
  88. var sprite = this.sprite.addComponent(Sprite);
  89. sprite.spriteFrame = spriteFrame;
  90. }
  91. oops.res.loadRemote<ImageAsset>(this.url, opt, onComplete);
  92. */
  93. loadRemote(url) {
  94. var options = null;
  95. var onComplete = null;
  96. if ((arguments.length <= 1 ? 0 : arguments.length - 1) == 2) {
  97. options = arguments.length <= 1 ? undefined : arguments[1];
  98. onComplete = arguments.length <= 2 ? undefined : arguments[2];
  99. } else {
  100. onComplete = arguments.length <= 1 ? undefined : arguments[1];
  101. }
  102. assetManager.loadRemote(url, options, onComplete);
  103. } //#endregion
  104. //#region 资源包管理
  105. /**
  106. * 加载资源包
  107. * @param url 资源地址
  108. * @param v 资源MD5版本号
  109. * @example
  110. var serverUrl = "http://192.168.1.8:8080/"; // 服务器地址
  111. var md5 = "8e5c0"; // Cocos Creator 构建后的MD5字符
  112. await oops.res.loadBundle(serverUrl,md5);
  113. */
  114. loadBundle(url, v) {
  115. return new Promise((resolve, reject) => {
  116. assetManager.loadBundle(url, {
  117. version: v
  118. }, (err, bundle) => {
  119. if (err) {
  120. return error(err);
  121. }
  122. resolve(bundle);
  123. });
  124. });
  125. }
  126. /**
  127. * 释放资源包与包中所有资源
  128. * @param bundleName 资源地址
  129. */
  130. removeBundle(bundleName) {
  131. var bundle = assetManager.bundles.get(bundleName);
  132. if (bundle) {
  133. bundle.releaseAll();
  134. assetManager.removeBundle(bundle);
  135. }
  136. } //#endregion
  137. //#region 预加载资源
  138. /**
  139. * 加载一个资源
  140. * @param bundleName 远程包名
  141. * @param paths 资源路径
  142. * @param type 资源类型
  143. * @param onProgress 加载进度回调
  144. * @param onComplete 加载完成回调
  145. */
  146. preload(bundleName, paths, type, onProgress, onComplete) {
  147. var args = null;
  148. if (typeof paths === "string" || paths instanceof Array) {
  149. args = this.parseLoadResArgs(paths, type, onProgress, onComplete);
  150. args.bundle = bundleName;
  151. } else {
  152. args = this.parseLoadResArgs(bundleName, paths, type, onProgress);
  153. args.bundle = this.defaultBundleName;
  154. }
  155. args.preload = true;
  156. this.loadByArgs(args);
  157. }
  158. /**
  159. * 异步加载一个资源
  160. * @param bundleName 远程包名
  161. * @param paths 资源路径
  162. * @param type 资源类型
  163. */
  164. preloadAsync(bundleName, paths, type) {
  165. return new Promise((resolve, reject) => {
  166. this.preload(bundleName, paths, type, (err, data) => {
  167. if (err) {
  168. warn(err.message);
  169. }
  170. resolve(data);
  171. });
  172. });
  173. }
  174. /**
  175. * 预加载文件夹中的资源
  176. * @param bundleName 远程包名
  177. * @param dir 文件夹名
  178. * @param type 资源类型
  179. * @param onProgress 加载进度回调
  180. * @param onComplete 加载完成回调
  181. */
  182. preloadDir(bundleName, dir, type, onProgress, onComplete) {
  183. var args = null;
  184. if (typeof dir === "string") {
  185. args = this.parseLoadResArgs(dir, type, onProgress, onComplete);
  186. args.bundle = bundleName;
  187. } else {
  188. args = this.parseLoadResArgs(bundleName, dir, type, onProgress);
  189. args.bundle = this.defaultBundleName;
  190. }
  191. args.dir = args.paths;
  192. args.preload = true;
  193. this.loadByArgs(args);
  194. } //#endregion
  195. //#region 资源加载、获取、释放
  196. /**
  197. * 加载一个资源
  198. * @param bundleName 远程包名
  199. * @param paths 资源路径
  200. * @param type 资源类型
  201. * @param onProgress 加载进度回调
  202. * @param onComplete 加载完成回调
  203. * @example
  204. oops.res.load("spine_path", sp.SkeletonData, (err: Error | null, sd: sp.SkeletonData) => {
  205. });
  206. */
  207. load(bundleName, paths, type, onProgress, onComplete) {
  208. var args = null;
  209. if (typeof paths === "string" || paths instanceof Array) {
  210. args = this.parseLoadResArgs(paths, type, onProgress, onComplete);
  211. args.bundle = bundleName;
  212. } else {
  213. args = this.parseLoadResArgs(bundleName, paths, type, onProgress);
  214. args.bundle = this.defaultBundleName;
  215. }
  216. this.loadByArgs(args);
  217. }
  218. /**
  219. * 异步加载一个资源
  220. * @param bundleName 远程包名
  221. * @param paths 资源路径
  222. * @param type 资源类型
  223. */
  224. loadAsync(bundleName, paths, type) {
  225. return new Promise((resolve, reject) => {
  226. this.load(bundleName, paths, type, (err, asset) => {
  227. if (err) {
  228. warn(err.message);
  229. }
  230. resolve(asset);
  231. });
  232. });
  233. }
  234. /**
  235. * 加载文件夹中的资源
  236. * @param bundleName 远程包名
  237. * @param dir 文件夹名
  238. * @param type 资源类型
  239. * @param onProgress 加载进度回调
  240. * @param onComplete 加载完成回调
  241. * @example
  242. // 加载进度事件
  243. var onProgressCallback = (finished: number, total: number, item: any) => {
  244. console.log("资源加载进度", finished, total);
  245. }
  246. // 加载完成事件
  247. var onCompleteCallback = () => {
  248. console.log("资源加载完成");
  249. }
  250. oops.res.loadDir("game", onProgressCallback, onCompleteCallback);
  251. */
  252. loadDir(bundleName, dir, type, onProgress, onComplete) {
  253. var args = null;
  254. if (typeof dir === "string") {
  255. args = this.parseLoadResArgs(dir, type, onProgress, onComplete);
  256. args.bundle = bundleName;
  257. } else {
  258. args = this.parseLoadResArgs(bundleName, dir, type, onProgress);
  259. args.bundle = this.defaultBundleName;
  260. }
  261. args.dir = args.paths;
  262. this.loadByArgs(args);
  263. }
  264. /**
  265. * 通过资源相对路径释放资源
  266. * @param path 资源路径
  267. * @param bundleName 远程资源包名
  268. */
  269. release(path, bundleName) {
  270. if (bundleName === void 0) {
  271. bundleName = this.defaultBundleName;
  272. }
  273. var bundle = assetManager.getBundle(bundleName);
  274. if (bundle) {
  275. var asset = bundle.get(path);
  276. if (asset) {
  277. this.releasePrefabtDepsRecursively(asset);
  278. }
  279. }
  280. }
  281. /**
  282. * 通过相对文件夹路径删除所有文件夹中资源
  283. * @param path 资源文件夹路径
  284. * @param bundleName 远程资源包名
  285. */
  286. releaseDir(path, bundleName) {
  287. if (bundleName === void 0) {
  288. bundleName = this.defaultBundleName;
  289. }
  290. var bundle = assetManager.getBundle(bundleName);
  291. if (bundle) {
  292. var infos = bundle.getDirWithPath(path);
  293. if (infos) {
  294. infos.map(info => {
  295. this.releasePrefabtDepsRecursively(info.uuid);
  296. });
  297. }
  298. if (path == "" && bundleName != "resources") {
  299. assetManager.removeBundle(bundle);
  300. }
  301. }
  302. }
  303. /** 释放预制依赖资源 */
  304. releasePrefabtDepsRecursively(uuid) {
  305. if (uuid instanceof Asset) {
  306. uuid.decRef(); // assetManager.releaseAsset(uuid);
  307. } else {
  308. var asset = assetManager.assets.get(uuid);
  309. if (asset) {
  310. asset.decRef(); // assetManager.releaseAsset(asset);
  311. }
  312. }
  313. }
  314. /**
  315. * 获取资源
  316. * @param path 资源路径
  317. * @param type 资源类型
  318. * @param bundleName 远程资源包名
  319. */
  320. get(path, type, bundleName) {
  321. if (bundleName === void 0) {
  322. bundleName = this.defaultBundleName;
  323. }
  324. var bundle = assetManager.getBundle(bundleName);
  325. return bundle.get(path, type);
  326. } //#endregion
  327. parseLoadResArgs(paths, type, onProgress, onComplete) {
  328. var pathsOut = paths;
  329. var typeOut = type;
  330. var onProgressOut = onProgress;
  331. var onCompleteOut = onComplete;
  332. if (onComplete === undefined) {
  333. var isValidType = js.isChildClassOf(type, Asset);
  334. if (onProgress) {
  335. onCompleteOut = onProgress;
  336. if (isValidType) {
  337. onProgressOut = null;
  338. }
  339. } else if (onProgress === undefined && !isValidType) {
  340. onCompleteOut = type;
  341. onProgressOut = null;
  342. typeOut = null;
  343. }
  344. if (onProgress !== undefined && !isValidType) {
  345. onProgressOut = type;
  346. typeOut = null;
  347. }
  348. }
  349. return {
  350. paths: pathsOut,
  351. type: typeOut,
  352. onProgress: onProgressOut,
  353. onComplete: onCompleteOut
  354. };
  355. }
  356. loadByBundleAndArgs(bundle, args) {
  357. if (args.dir) {
  358. if (args.preload) {
  359. bundle.preloadDir(args.paths, args.type, args.onProgress, args.onComplete);
  360. } else {
  361. bundle.loadDir(args.paths, args.type, args.onProgress, args.onComplete);
  362. }
  363. } else {
  364. if (args.preload) {
  365. bundle.preload(args.paths, args.type, args.onProgress, args.onComplete);
  366. } else {
  367. bundle.load(args.paths, args.type, args.onProgress, args.onComplete);
  368. }
  369. }
  370. }
  371. loadByArgs(args) {
  372. var _this = this;
  373. return _asyncToGenerator(function* () {
  374. if (args.bundle) {
  375. var bundle = assetManager.bundles.get(args.bundle); // 获取缓存中的资源包
  376. if (bundle) {
  377. _this.loadByBundleAndArgs(bundle, args);
  378. } // 自动加载资源包
  379. else {
  380. var v = _this.cdn ? _this.bundles.get(args.bundle) : "";
  381. bundle = yield _this.loadBundle(args.bundle, v);
  382. if (bundle) _this.loadByBundleAndArgs(bundle, args);
  383. }
  384. } // 默认资源包
  385. else {
  386. _this.loadByBundleAndArgs(resources, args);
  387. }
  388. })();
  389. }
  390. /** 打印缓存中所有资源信息 */
  391. dump() {
  392. assetManager.assets.forEach((value, key) => {
  393. console.log(assetManager.assets.get(key));
  394. });
  395. console.log("\u5F53\u524D\u8D44\u6E90\u603B\u6570:" + assetManager.assets.count);
  396. }
  397. });
  398. _export("resLoader", resLoader = new ResLoader());
  399. _cclegacy._RF.pop();
  400. _crd = false;
  401. }
  402. };
  403. });
  404. //# sourceMappingURL=bd21ad9b63d9e3cba9431abca9625ce120a237d7.js.map