feat: added custiomized functions to ResourceManager
This commit is contained in:
parent
a1bc6aa095
commit
3f7254ffb8
|
@ -974,6 +974,100 @@ export default class ResourceManager {
|
|||
/ this.loadonly_typesToLoad;
|
||||
}
|
||||
|
||||
// Customized funtions below
|
||||
// These funtions are NOT well tested!!!
|
||||
// Only used for shatted sword specific purpose!!!
|
||||
// Use them carefully!!!
|
||||
|
||||
public loadSingleTilemap(key: string, tiledMap: TiledTilemapData, callbackIfLast: Function): void {
|
||||
// We can parse the object later - it's much faster than loading
|
||||
this.tilemaps.add(key, tiledMap);
|
||||
let resource = new ResourceReference(key, ResourceType.TILEMAP);
|
||||
|
||||
// Grab the tileset images we need to load and add them to the imageloading queue
|
||||
for (let tileset of tiledMap.tilesets) {
|
||||
if (tileset.image) {
|
||||
let key = tileset.image;
|
||||
let path = key;
|
||||
this.loadSingleImage(key, path, true , callbackIfLast);
|
||||
|
||||
// Add this image as a dependency to the tilemap
|
||||
resource.addDependency(new ResourceReference(key, ResourceType.IMAGE));
|
||||
}
|
||||
}
|
||||
|
||||
// Add the resource reference to the list of resource to unload
|
||||
this.resourcesToUnload.push(resource);
|
||||
}
|
||||
|
||||
private loadSingleSpritesheet(key: string, pathToSpritesheetJSON: string, callbackIfLast: Function): void {
|
||||
this.loadTextFile(pathToSpritesheetJSON, (fileText: string) => {
|
||||
let spritesheet = <Spritesheet>JSON.parse(fileText);
|
||||
|
||||
// We can parse the object later - it's much faster than loading
|
||||
this.spritesheets.add(key, spritesheet);
|
||||
|
||||
let resource = new ResourceReference(key, ResourceType.SPRITESHEET);
|
||||
|
||||
// Grab the image we need to load and add it to the imageloading queue
|
||||
let path = StringUtils.getPathFromFilePath(pathToSpritesheetJSON) + spritesheet.spriteSheetImage;
|
||||
this.loadSingleImage(spritesheet.name, path, true, callbackIfLast);
|
||||
|
||||
resource.addDependency(new ResourceReference(spritesheet.name, ResourceType.IMAGE));
|
||||
this.resourcesToUnload.push(resource);
|
||||
});
|
||||
}
|
||||
|
||||
public loadSingleImage(key: string, path: string, isDependency: boolean, callbackIfLast: Function): void {
|
||||
var image = new Image();
|
||||
|
||||
image.onload = () => {
|
||||
// Add to loaded images
|
||||
this.images.add(key, image);
|
||||
|
||||
// If not a dependency, push it to the unload list. Otherwise it's managed by something else
|
||||
if (!isDependency) {
|
||||
this.resourcesToUnload.push(new ResourceReference(key, ResourceType.IMAGE));
|
||||
}
|
||||
|
||||
// If WebGL is active, create a texture
|
||||
if (this.gl_WebGLActive) {
|
||||
this.createWebGLTexture(key, image);
|
||||
}
|
||||
|
||||
// Finish image load
|
||||
this.finishLoadingSingleObject(callbackIfLast);
|
||||
}
|
||||
|
||||
image.src = path;
|
||||
}
|
||||
|
||||
private loadSingleAudio(key: string, path: string, callbackIfLast: Function): void {
|
||||
let audioCtx = AudioManager.getInstance().getAudioContext();
|
||||
|
||||
let request = new XMLHttpRequest();
|
||||
request.open('GET', path, true);
|
||||
request.responseType = 'arraybuffer';
|
||||
|
||||
request.onload = () => {
|
||||
audioCtx.decodeAudioData(request.response, (buffer) => {
|
||||
// Add to list of audio buffers
|
||||
this.audioBuffers.add(key, buffer);
|
||||
this.resourcesToUnload.push(new ResourceReference(key, ResourceType.AUDIO));
|
||||
|
||||
// Finish loading sound
|
||||
this.finishLoadingSingleObject(callbackIfLast);
|
||||
}, (error) => {
|
||||
throw "Error loading sound";
|
||||
});
|
||||
}
|
||||
request.send();
|
||||
}
|
||||
|
||||
private finishLoadingSingleObject(callback: Function): void {
|
||||
callback();
|
||||
}
|
||||
|
||||
update(deltaT: number): void {
|
||||
if (this.loading) {
|
||||
if (this.onLoadProgress) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user