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,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"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user