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,21 +81,16 @@ 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) => {
// Triggered when the map is loaded this.onMapLoad(data);
// Load tiles attached to the map recursively
this.map = data.data;
let url = this.MapUrlFile.substr(0, this.MapUrlFile.lastIndexOf('/'));
this.map.tilesets.forEach((tileset) => {
if (typeof tileset.name === 'undefined' || typeof tileset.image === 'undefined') {
console.warn("Don't know how to handle tileset ", tileset)
return;
}
//TODO strategy to add access token
this.load.image(tileset.name, `${url}/${tileset.image}`);
})
}); });
//TODO strategy to add access token //TODO strategy to add access token
this.load.tilemapTiledJSON(this.MapKey, this.MapUrlFile); 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 //add player png
PLAYER_RESOURCES.forEach((playerResource: any) => { PLAYER_RESOURCES.forEach((playerResource: any) => {
@ -109,6 +104,21 @@ export class GameScene extends Phaser.Scene {
this.load.bitmapFont('main_font', 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml'); this.load.bitmapFont('main_font', 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml');
} }
private onMapLoad(data: any): void {
// Triggered when the map is loaded
// Load tiles attached to the map recursively
this.map = data.data;
let url = this.MapUrlFile.substr(0, this.MapUrlFile.lastIndexOf('/'));
this.map.tilesets.forEach((tileset) => {
if (typeof tileset.name === 'undefined' || typeof tileset.image === 'undefined') {
console.warn("Don't know how to handle tileset ", tileset)
return;
}
//TODO strategy to add access token
this.load.image(tileset.name, `${url}/${tileset.image}`);
})
}
//hook initialisation //hook initialisation
init(initData : GameSceneInitInterface) { init(initData : GameSceneInitInterface) {
this.initPosition = initData.initPosition; this.initPosition = initData.initPosition;
@ -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"));
} }
} }