ResUtil.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import { _decorator, assert, Asset, AssetManager, assetManager, Component, JsonAsset, Material, Node, Sprite, SpriteFrame } from 'cc';
  2. import { ModuleDef } from '../../scripts/ModuleDef';
  3. const { ccclass, property } = _decorator;
  4. export class ResUtil {
  5. private static resMap = new Map<string | number, any>
  6. static loadDir(assType: AssetType, cb, util_cb?) {
  7. let boude = assetManager.getBundle(assType.boundName)
  8. let res = (bundle: AssetManager.Bundle) => {
  9. bundle.loadDir(assType.path, assType.type, function (err, assets: any[]) {
  10. if (err) {
  11. console.log(err);
  12. return;
  13. }
  14. for (let i = 0; i < assets.length; i++) {
  15. util_cb && util_cb(assets[i], i)
  16. }
  17. cb(assets);
  18. });
  19. }
  20. if (!boude) {
  21. assetManager.loadBundle(assType.boundName, assType.type, (err, bundle: AssetManager.Bundle) => {
  22. if (err) {
  23. console.log(err);
  24. return;
  25. }
  26. res(bundle)
  27. })
  28. } else {
  29. res(boude)
  30. }
  31. }
  32. static loadResToMap(assType: AssetType, toMap: (res) => any, cb?) {
  33. if (ResUtil.resMap.has(assType.id)) {
  34. cb?.()
  35. return
  36. }
  37. this.loadDir(assType, (res) => {
  38. ResUtil.resMap.set(assType.id, toMap(res))
  39. cb?.()
  40. })
  41. }
  42. static getAsset(assetType: AssetType) {
  43. return ResUtil.resMap.get(assetType.id)
  44. }
  45. static loadAsset<T extends Asset>(bundleName: string, url: string): Promise<T> {
  46. return new Promise<T>((resolve) => {
  47. let bundle = assetManager.getBundle(bundleName)
  48. if (bundle) {
  49. bundle.load(url, (err, data: T) => {
  50. if (err) {
  51. console.error(err)
  52. resolve(null)
  53. return
  54. }
  55. resolve(data)
  56. return
  57. })
  58. } else {
  59. assetManager.loadBundle(bundleName, (err, bundle: AssetManager.Bundle) => {
  60. if (err) {
  61. console.error(err)
  62. resolve(null)
  63. return
  64. }
  65. bundle.load(url, (err, data: T) => {
  66. if (err) {
  67. console.error(err)
  68. resolve(null)
  69. return
  70. }
  71. resolve(data)
  72. return
  73. })
  74. })
  75. }
  76. })
  77. }
  78. }
  79. export const AssetType = ({
  80. // card_sprite: { id:0,type: SpriteFrame, path: "image/card",boundName:ModuleDef.EXTRA} as AssetType,
  81. Json: { id: 1, type: JsonAsset, path: "json", boundName: ModuleDef.EXTRA } as AssetType,
  82. })
  83. export type AssetType = {
  84. type: any,
  85. path: string
  86. boundName: string
  87. id: string | number
  88. }