Merge pull request #147 from thecodingmachine/fix_gamescene_reuse

Removing GameScene from the list of known GameScene when leaving
This commit is contained in:
David Négrier 2020-06-03 10:55:17 +02:00 committed by GitHub
commit b59c6ee17b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -81,6 +81,30 @@ export class GameScene extends Phaser.Scene {
preload(): void { preload(): void {
this.GameManager.setCurrentGameScene(this); this.GameManager.setCurrentGameScene(this);
this.load.on('filecomplete-tilemapJSON-'+this.MapKey, (key: string, type: string, data: any) => { this.load.on('filecomplete-tilemapJSON-'+this.MapKey, (key: string, type: string, data: any) => {
this.onMapLoad(data);
});
//TODO strategy to add access token
this.load.tilemapTiledJSON(this.MapKey, this.MapUrlFile);
// If the map has already been loaded as part of another GameScene, the "on load" event will not be triggered.
// In this case, we check in the cache to see if the map is here and trigger the event manually.
if (this.cache.tilemap.exists(this.MapKey)) {
let data = this.cache.tilemap.get(this.MapKey);
this.onMapLoad(data);
}
//add player png
PLAYER_RESOURCES.forEach((playerResource: any) => {
this.load.spritesheet(
playerResource.name,
playerResource.img,
{frameWidth: 32, frameHeight: 32}
);
});
this.load.bitmapFont('main_font', 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml');
}
private onMapLoad(data: any): void {
// Triggered when the map is loaded // Triggered when the map is loaded
// Load tiles attached to the map recursively // Load tiles attached to the map recursively
this.map = data.data; this.map = data.data;
@ -93,20 +117,6 @@ export class GameScene extends Phaser.Scene {
//TODO strategy to add access token //TODO strategy to add access token
this.load.image(tileset.name, `${url}/${tileset.image}`); this.load.image(tileset.name, `${url}/${tileset.image}`);
}) })
});
//TODO strategy to add access token
this.load.tilemapTiledJSON(this.MapKey, this.MapUrlFile);
//add player png
PLAYER_RESOURCES.forEach((playerResource: any) => {
this.load.spritesheet(
playerResource.name,
playerResource.img,
{frameWidth: 32, frameHeight: 32}
);
});
this.load.bitmapFont('main_font', 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml');
} }
//hook initialisation //hook initialisation
@ -397,6 +407,8 @@ export class GameScene extends Phaser.Scene {
let nextSceneKey = this.checkToExit(); let nextSceneKey = this.checkToExit();
if(nextSceneKey){ if(nextSceneKey){
// We are completely destroying the current scene to avoid using a half-backed instance when coming back to the same map.
this.scene.remove(this.scene.key);
this.scene.start(nextSceneKey.key); this.scene.start(nextSceneKey.key);
} }
} }
@ -526,9 +538,5 @@ export class GameScene extends Phaser.Scene {
let startPos = mapUrlStart.indexOf('://')+3; let startPos = mapUrlStart.indexOf('://')+3;
let endPos = mapUrlStart.indexOf(".json"); let endPos = mapUrlStart.indexOf(".json");
return mapUrlStart.substring(startPos, endPos); return mapUrlStart.substring(startPos, endPos);
let tab = mapUrlStart.split("/");
return tab[tab.length -1].substr(0, tab[tab.length -1].indexOf(".json"));
} }
} }