pinball/assets/_Game/Scripts/Manager/DynamicSpriteManager.ts

57 lines
1.7 KiB
TypeScript

import { _decorator, assetManager, Component, ImageAsset, JsonAsset, Node, SpriteFrame, Texture2D } from 'cc';
import Singleton from '../Singleton';
import Utils from '../Utilities';
const { ccclass, property } = _decorator;
@ccclass('DynamicSpriteManager')
export default class DynamicSpriteManager extends Singleton<DynamicSpriteManager>() {
@property(JsonAsset)
private jsonConfig: JsonAsset;
private spriteMap: Map<string, SpriteFrame> = new Map();
private initialized = false;
protected onLoad(): void {
super.onLoad();
this.init();
}
private async init() {
const config = this.jsonConfig.json;
for (let i = 0; i < config.length; i++) {
const el = config[i];
try {
const spriteFrame = await this.loadSprite(el.URL);
this.spriteMap.set(el.ID, spriteFrame);
} catch (err) {
console.log(err);
}
}
this.initialized = true;
}
private loadSprite(url: string): Promise<SpriteFrame> {
return new Promise((resolve, reject) => {
assetManager.loadRemote<ImageAsset>(url, (err, imageAsset) => {
if (err) {
reject(err);
} else {
const spriteFrame = new SpriteFrame();
const texture = new Texture2D();
texture.image = imageAsset;
spriteFrame.texture = texture;
resolve(spriteFrame);
}
});
});
}
public async getSpriteFrame(id: string): Promise<SpriteFrame> {
await Utils.waitUntil(() => this.initialized);
return this.spriteMap.get(id);
}
}