Merge pull request #95 from thecodingmachine/lyon_map

Refactoring "exit" to allow multiple maps
This commit is contained in:
David Négrier 2020-05-11 22:56:47 +02:00 committed by GitHub
commit 7ded674cc4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 675 additions and 17 deletions

View file

@ -107,7 +107,7 @@ export class GameScene extends Phaser.Scene implements GameSceneInterface, Creat
if (layer.type === 'tilelayer') {
this.addLayer(this.Map.createStaticLayer(layer.name, this.Terrains, 0, 0).setDepth(depth));
}
if (layer.type === 'tilelayer' && layer.name === "exit") {
if (layer.type === 'tilelayer' && this.getExitSceneUrl(layer) !== undefined) {
this.loadNextGame(layer, this.map.width, this.map.tilewidth, this.map.tileheight);
}
if (layer.type === 'tilelayer' && layer.name === "start") {
@ -153,6 +153,18 @@ export class GameScene extends Phaser.Scene implements GameSceneInterface, Creat
this.circleTexture.refresh();
}
private getExitSceneUrl(layer: ITiledMapLayer): string|undefined {
let properties : any = layer.properties;
if (!properties) {
return undefined;
}
let obj = properties.find((property:any) => property.name === "exitSceneUrl");
if (obj === undefined) {
return undefined;
}
return obj.value;
}
/**
*
* @param layer
@ -161,15 +173,14 @@ export class GameScene extends Phaser.Scene implements GameSceneInterface, Creat
* @param tileHeight
*/
private loadNextGame(layer: ITiledMapLayer, mapWidth: number, tileWidth: number, tileHeight: number){
let properties : any = layer.properties;
let exitSceneUrl = properties.find((property:any) => property.name === "exitSceneUrl");
let exitSceneUrl = this.getExitSceneUrl(layer);
let exitSceneKey = getMapKeyByUrl(exitSceneUrl.value);
let exitSceneKey = getMapKeyByUrl(exitSceneUrl);
let gameIndex = this.scene.getIndex(exitSceneKey);
let game : Phaser.Scene = null;
if(gameIndex === -1){
game = new GameScene(exitSceneKey, `${MAP_FILE_URL}${exitSceneUrl.value}`);
game = new GameScene(exitSceneKey, `${MAP_FILE_URL}${exitSceneUrl}`);
this.scene.add(exitSceneKey, game, false);
}else{
game = this.scene.get(exitSceneKey);
@ -186,6 +197,7 @@ export class GameScene extends Phaser.Scene implements GameSceneInterface, Creat
let y : number = parseInt(((key + 1) / mapWidth).toString());
let x : number = key - (y * mapWidth);
//push and save switching case
// TODO: this is not efficient. We should refactor that to enable a search by key. For instance: this.PositionNextScene[y][x] = exitSceneKey
this.PositionNextScene.push({
xStart: (x * tileWidth),
yStart: (y * tileWidth),
@ -205,9 +217,8 @@ export class GameScene extends Phaser.Scene implements GameSceneInterface, Creat
if(objectKey === 0){
return;
}
let y = (key / 45);
y = parseInt(`${y}`);
let x = key - (y * 46);
let y = Math.floor(key / layer.width);
let x = key % layer.width;
this.startX = (x * 32);
this.startY = (y * 32);