import { _decorator, assert, Asset, AssetManager, assetManager, Component, JsonAsset, Material, Node, Sprite, SpriteFrame } from 'cc'; import { ModuleDef } from '../../scripts/ModuleDef'; const { ccclass, property } = _decorator; export class ResUtil { private static resMap = new Map static loadDir(assType: AssetType, cb, util_cb?) { let boude = assetManager.getBundle(assType.boundName) let res = (bundle: AssetManager.Bundle) => { bundle.loadDir(assType.path, assType.type, function (err, assets: any[]) { if (err) { console.log(err); return; } for (let i = 0; i < assets.length; i++) { util_cb && util_cb(assets[i], i) } cb(assets); }); } if (!boude) { assetManager.loadBundle(assType.boundName, assType.type, (err, bundle: AssetManager.Bundle) => { if (err) { console.log(err); return; } res(bundle) }) } else { res(boude) } } static loadResToMap(assType: AssetType, toMap: (res) => any, cb?) { if (ResUtil.resMap.has(assType.id)) { cb?.() return } this.loadDir(assType, (res) => { ResUtil.resMap.set(assType.id, toMap(res)) cb?.() }) } static getAsset(assetType: AssetType) { return ResUtil.resMap.get(assetType.id) } static loadAsset(bundleName: string, url: string): Promise { return new Promise((resolve) => { let bundle = assetManager.getBundle(bundleName) if (bundle) { bundle.load(url, (err, data: T) => { if (err) { console.error(err) resolve(null) return } resolve(data) return }) } else { assetManager.loadBundle(bundleName, (err, bundle: AssetManager.Bundle) => { if (err) { console.error(err) resolve(null) return } bundle.load(url, (err, data: T) => { if (err) { console.error(err) resolve(null) return } resolve(data) return }) }) } }) } } export const AssetType = ({ // card_sprite: { id:0,type: SpriteFrame, path: "image/card",boundName:ModuleDef.EXTRA} as AssetType, Json: { id: 1, type: JsonAsset, path: "json", boundName: ModuleDef.EXTRA } as AssetType, }) export type AssetType = { type: any, path: string boundName: string id: string | number }