feat: added loadTilemapFromObject
This commit is contained in:
parent
3f7254ffb8
commit
11e3362bf2
|
@ -42,7 +42,7 @@
|
|||
{
|
||||
"columns":8,
|
||||
"firstgid":1,
|
||||
"image":"forest_tileset.png",
|
||||
"image":"shattered_sword_assets/tilemaps/forest_tileset.png",
|
||||
"imageheight":128,
|
||||
"imagewidth":128,
|
||||
"margin":0,
|
||||
|
|
|
@ -81,6 +81,10 @@ export default class ResourceManager {
|
|||
private loadonly_gl_ShaderProgramsToLoad: number;
|
||||
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_Textures: Map<number>;
|
||||
|
@ -137,6 +141,10 @@ export default class ResourceManager {
|
|||
|
||||
this.resourcesToUnload = new Array();
|
||||
this.resourcesToKeep = new Array();
|
||||
|
||||
this.loadonly_tilemapObjectToLoad = 0;
|
||||
this.loadonly_tilemapObjectToLoad = 0;
|
||||
this.loadonly_tilemapObjectLoadingQueue = new Queue();
|
||||
};
|
||||
|
||||
/* ######################################## SINGLETON ########################################*/
|
||||
|
@ -311,6 +319,9 @@ export default class ResourceManager {
|
|||
this.loading = true;
|
||||
|
||||
// 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(() => {
|
||||
console.log("Loaded Tilemaps");
|
||||
this.loadSpritesheetsFromQueue(() => {
|
||||
|
@ -335,6 +346,7 @@ export default class ResourceManager {
|
|||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private finishLoading(callback: Function): void {
|
||||
|
@ -976,11 +988,32 @@ export default class ResourceManager {
|
|||
|
||||
// Customized funtions below
|
||||
// These funtions are NOT well tested!!!
|
||||
// Only used for shatted sword specific purpose!!!
|
||||
// Only used for shattered sword specific purpose!!!
|
||||
// Use them carefully!!!
|
||||
|
||||
public loadSingleTilemap(key: string, tiledMap: TiledTilemapData, callbackIfLast: Function): void {
|
||||
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);
|
||||
|
||||
|
@ -989,7 +1022,7 @@ export default class ResourceManager {
|
|||
if (tileset.image) {
|
||||
let key = tileset.image;
|
||||
let path = key;
|
||||
this.loadSingleImage(key, path, true , callbackIfLast);
|
||||
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));
|
||||
|
@ -998,24 +1031,17 @@ export default class ResourceManager {
|
|||
|
||||
// Add the resource reference to the list of resource to unload
|
||||
this.resourcesToUnload.push(resource);
|
||||
|
||||
this.finishLoadingTilemapObject(callbackIfLast);
|
||||
}
|
||||
|
||||
private loadSingleSpritesheet(key: string, pathToSpritesheetJSON: string, callbackIfLast: Function): void {
|
||||
this.loadTextFile(pathToSpritesheetJSON, (fileText: string) => {
|
||||
let spritesheet = <Spritesheet>JSON.parse(fileText);
|
||||
private finishLoadingTilemapObject(callback: Function): void {
|
||||
this.loadonly_tilemapObjectLoaded += 1;
|
||||
|
||||
// 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);
|
||||
});
|
||||
if (this.loadonly_tilemapObjectLoaded === this.loadonly_tilemapObjectToLoad) {
|
||||
// We're done loading tilemaps
|
||||
callback();
|
||||
}
|
||||
}
|
||||
|
||||
public loadSingleImage(key: string, path: string, isDependency: boolean, callbackIfLast: Function): void {
|
||||
|
@ -1025,10 +1051,7 @@ export default class ResourceManager {
|
|||
// 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) {
|
||||
|
@ -1038,11 +1061,10 @@ export default class ResourceManager {
|
|||
// Finish image load
|
||||
this.finishLoadingSingleObject(callbackIfLast);
|
||||
}
|
||||
|
||||
image.src = path;
|
||||
}
|
||||
|
||||
private loadSingleAudio(key: string, path: string, callbackIfLast: Function): void {
|
||||
public loadSingleAudio(key: string, path: string, callbackIfLast: Function): void {
|
||||
let audioCtx = AudioManager.getInstance().getAudioContext();
|
||||
|
||||
let request = new XMLHttpRequest();
|
||||
|
@ -1122,6 +1144,11 @@ class KeyPathPair {
|
|||
isDependency?: boolean = false;
|
||||
}
|
||||
|
||||
class KeyMapPair {
|
||||
key: string;
|
||||
map: TiledTilemapData;
|
||||
}
|
||||
|
||||
class KeyPath_Shader {
|
||||
key: string;
|
||||
vpath: string;
|
||||
|
|
|
@ -9,7 +9,10 @@ export default class Tutorial extends GameLevel{
|
|||
|
||||
loadScene(): void {
|
||||
// Load resources
|
||||
this.load.tilemap("forest1", "shattered_sword_assets/tilemaps/Tutorial.json");
|
||||
// this.load.tilemap("forest1", "shattered_sword_assets/tilemaps/Tutorial.json");
|
||||
let map = localStorage.getItem("map");
|
||||
this.load.tilemapFromObject("forest1", JSON.parse(map));
|
||||
|
||||
this.load.spritesheet("player", "shattered_sword_assets/spritesheets/Hiro.json")
|
||||
//load music here
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user