Merge pull request #147 from thecodingmachine/fix_gamescene_reuse
Removing GameScene from the list of known GameScene when leaving
This commit is contained in:
commit
b59c6ee17b
@ -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"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user