reverted resourceManager
This commit is contained in:
parent
1f0764087a
commit
6e34e8b2d4
|
@ -81,6 +81,10 @@ export default class ResourceManager {
|
||||||
private loadonly_gl_ShaderProgramsToLoad: number;
|
private loadonly_gl_ShaderProgramsToLoad: number;
|
||||||
private loadonly_gl_ShaderLoadingQueue: Queue<KeyPath_Shader>;
|
private loadonly_gl_ShaderLoadingQueue: Queue<KeyPath_Shader>;
|
||||||
|
|
||||||
|
private loadonly_tilemapObjectToLoad: number;
|
||||||
|
private loadonly_tilemapObjectLoaded: number;
|
||||||
|
private loadonly_tilemapObjectLoadingQueue: Queue<KeyMapPair>;
|
||||||
|
|
||||||
private gl_ShaderPrograms: Map<WebGLProgramType>;
|
private gl_ShaderPrograms: Map<WebGLProgramType>;
|
||||||
|
|
||||||
private gl_Textures: Map<number>;
|
private gl_Textures: Map<number>;
|
||||||
|
@ -137,6 +141,10 @@ export default class ResourceManager {
|
||||||
|
|
||||||
this.resourcesToUnload = new Array();
|
this.resourcesToUnload = new Array();
|
||||||
this.resourcesToKeep = new Array();
|
this.resourcesToKeep = new Array();
|
||||||
|
|
||||||
|
this.loadonly_tilemapObjectToLoad = 0;
|
||||||
|
this.loadonly_tilemapObjectToLoad = 0;
|
||||||
|
this.loadonly_tilemapObjectLoadingQueue = new Queue();
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ######################################## SINGLETON ########################################*/
|
/* ######################################## SINGLETON ########################################*/
|
||||||
|
@ -190,9 +198,9 @@ export default class ResourceManager {
|
||||||
*/
|
*/
|
||||||
public getImage(key: string): HTMLImageElement {
|
public getImage(key: string): HTMLImageElement {
|
||||||
let image = this.images.get(key);
|
let image = this.images.get(key);
|
||||||
if(image === undefined){
|
// if (image === undefined) {
|
||||||
throw `There is no image associated with key "${key}"`
|
// throw `There is no image associated with key "${key}"`
|
||||||
}
|
// }
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -311,6 +319,9 @@ export default class ResourceManager {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
|
|
||||||
// Load everything in the queues. Tilemaps have to come before images because they will add new images to the queue
|
// Load everything in the queues. Tilemaps have to come before images because they will add new images to the queue
|
||||||
|
|
||||||
|
this.loadTilemapObjectFromQueue(() => {
|
||||||
|
console.log("Loaded TilemapObjects");
|
||||||
this.loadTilemapsFromQueue(() => {
|
this.loadTilemapsFromQueue(() => {
|
||||||
console.log("Loaded Tilemaps");
|
console.log("Loaded Tilemaps");
|
||||||
this.loadSpritesheetsFromQueue(() => {
|
this.loadSpritesheetsFromQueue(() => {
|
||||||
|
@ -335,6 +346,7 @@ export default class ResourceManager {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private finishLoading(callback: Function): void {
|
private finishLoading(callback: Function): void {
|
||||||
|
@ -974,6 +986,110 @@ export default class ResourceManager {
|
||||||
/ this.loadonly_typesToLoad;
|
/ this.loadonly_typesToLoad;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Customized funtions below
|
||||||
|
// These funtions are NOT well tested!!!
|
||||||
|
// Only used for shattered sword specific purpose!!!
|
||||||
|
// Use them carefully!!!
|
||||||
|
|
||||||
|
public tilemapFromObject(key: string, tilemap: TiledTilemapData): void {
|
||||||
|
this.loadonly_tilemapObjectLoadingQueue.enqueue({ key: key, map: tilemap });
|
||||||
|
}
|
||||||
|
|
||||||
|
private loadTilemapObjectFromQueue(onFinishLoading: Function) {
|
||||||
|
this.loadonly_tilemapObjectToLoad = this.loadonly_tilemapObjectLoadingQueue.getSize();
|
||||||
|
this.loadonly_tilemapObjectLoaded = 0;
|
||||||
|
|
||||||
|
// If no items to load, we're finished
|
||||||
|
if (this.loadonly_tilemapObjectToLoad === 0) {
|
||||||
|
onFinishLoading();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (this.loadonly_tilemapObjectLoadingQueue.hasItems()) {
|
||||||
|
let map = this.loadonly_tilemapObjectLoadingQueue.dequeue();
|
||||||
|
this.loadTilemapFromObject(map.key, map.map, onFinishLoading);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private loadTilemapFromObject(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.loadonly_imageLoadingQueue.enqueue({ key: key, path: path, isDependency: true });
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
this.finishLoadingTilemapObject(callbackIfLast);
|
||||||
|
}
|
||||||
|
|
||||||
|
private finishLoadingTilemapObject(callback: Function): void {
|
||||||
|
this.loadonly_tilemapObjectLoaded += 1;
|
||||||
|
|
||||||
|
if (this.loadonly_tilemapObjectLoaded === this.loadonly_tilemapObjectToLoad) {
|
||||||
|
// We're done loading tilemaps
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public singleImage(key: string, path: string, callbackIfLast: Function): void {
|
||||||
|
var image = new Image();
|
||||||
|
|
||||||
|
image.onload = () => {
|
||||||
|
// Add to loaded images
|
||||||
|
this.images.add(key, image);
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
public singleAudio(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 {
|
update(deltaT: number): void {
|
||||||
if (this.loading) {
|
if (this.loading) {
|
||||||
if (this.onLoadProgress) {
|
if (this.onLoadProgress) {
|
||||||
|
@ -1028,6 +1144,11 @@ class KeyPathPair {
|
||||||
isDependency?: boolean = false;
|
isDependency?: boolean = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class KeyMapPair {
|
||||||
|
key: string;
|
||||||
|
map: TiledTilemapData;
|
||||||
|
}
|
||||||
|
|
||||||
class KeyPath_Shader {
|
class KeyPath_Shader {
|
||||||
key: string;
|
key: string;
|
||||||
vpath: string;
|
vpath: string;
|
||||||
|
|
|
@ -9,6 +9,7 @@ import Sprite from "../../Wolfie2D/Nodes/Sprites/Sprite";
|
||||||
import { GameEventType } from "../../Wolfie2D/Events/GameEventType";
|
import { GameEventType } from "../../Wolfie2D/Events/GameEventType";
|
||||||
import Input from "../../Wolfie2D/Input/Input";
|
import Input from "../../Wolfie2D/Input/Input";
|
||||||
|
|
||||||
|
|
||||||
enum Mode {
|
enum Mode {
|
||||||
GAME_MODE = "GameMode",
|
GAME_MODE = "GameMode",
|
||||||
STORY_MODE = "StoryMode",
|
STORY_MODE = "StoryMode",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user