Redirecting to the correct map after login screen based on URL provided

This commit is contained in:
David Négrier 2020-05-13 00:02:39 +02:00
parent daa559738b
commit faadacddb6
11 changed files with 49 additions and 43 deletions

View File

@ -49,7 +49,7 @@
{ {
"name":"exitSceneUrl", "name":"exitSceneUrl",
"type":"string", "type":"string",
"value":"\/Floor1\/floor1.json" "value":"..\/Floor1\/floor1.json"
}], }],
"type":"tilelayer", "type":"tilelayer",
"visible":true, "visible":true,
@ -67,7 +67,7 @@
{ {
"name":"exitSceneUrl", "name":"exitSceneUrl",
"type":"string", "type":"string",
"value":"\/Lyon\/lyon.json" "value":"..\/Lyon\/lyon.json"
}], }],
"type":"tilelayer", "type":"tilelayer",
"visible":true, "visible":true,

View File

@ -43,7 +43,7 @@
{ {
"name":"exitSceneUrl", "name":"exitSceneUrl",
"type":"string", "type":"string",
"value":"\/Floor0\/floor0.json" "value":"..\/Floor0\/floor0.json"
}], }],
"type":"tilelayer", "type":"tilelayer",
"visible":true, "visible":true,

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

View File

@ -37,7 +37,7 @@
{ {
"name":"exitSceneUrl", "name":"exitSceneUrl",
"type":"string", "type":"string",
"value":"\/Floor0\/floor0.json" "value":"..\/Floor0\/floor0.json"
}], }],
"type":"tilelayer", "type":"tilelayer",
"visible":true, "visible":true,

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -20,7 +20,7 @@ export class MapController {
getMaps() { getMaps() {
this.App.get("/maps", (req: Request, res: Response) => { this.App.get("/maps", (req: Request, res: Response) => {
return res.status(OK).send({ return res.status(OK).send({
mapUrlStart: URL_ROOM_STARTED mapUrlStart: req.headers.host + "/map/files" + URL_ROOM_STARTED
}); });
}); });
} }

View File

@ -140,7 +140,6 @@ export interface ConnexionInterface {
token: string; token: string;
email: string; email: string;
userId: string; userId: string;
startedRoom: string;
createConnexion(characterSelected: string): Promise<any>; createConnexion(characterSelected: string): Promise<any>;
@ -167,7 +166,6 @@ export class Connexion implements ConnexionInterface {
token: string; token: string;
email: string; email: string;
userId: string; userId: string;
startedRoom: string;
GameManager: GameManager; GameManager: GameManager;
@ -183,8 +181,6 @@ export class Connexion implements ConnexionInterface {
return Axios.post(`${API_URL}/login`, {email: this.email}) return Axios.post(`${API_URL}/login`, {email: this.email})
.then((res) => { .then((res) => {
this.token = res.data.token; this.token = res.data.token;
this.startedRoom = getMapKeyByUrl(res.data.mapUrlStart);
this.userId = res.data.userId; this.userId = res.data.userId;
this.socket = SocketIo(`${API_URL}`, { this.socket = SocketIo(`${API_URL}`, {
@ -194,10 +190,10 @@ export class Connexion implements ConnexionInterface {
}); });
//join the room //join the room
this.joinARoom(this.startedRoom, characterSelected); //this.joinARoom(this.startedRoom, characterSelected);
//share your first position //share your first position
this.sharePosition(0, 0, characterSelected, this.startedRoom); //this.sharePosition(0, 0, characterSelected, this.startedRoom);
this.positionOfAllUser(); this.positionOfAllUser();

View File

@ -3,13 +3,11 @@ const API_URL = process.env.API_URL || "http://api.workadventure.localhost";
const ROOM = [process.env.ROOM || "THECODINGMACHINE"]; const ROOM = [process.env.ROOM || "THECODINGMACHINE"];
const RESOLUTION = 3; const RESOLUTION = 3;
const ZOOM_LEVEL = 1/*3/4*/; const ZOOM_LEVEL = 1/*3/4*/;
const MAP_FILE_URL = `${API_URL}/map/files`;
export { export {
DEBUG_MODE, DEBUG_MODE,
API_URL, API_URL,
RESOLUTION, RESOLUTION,
ZOOM_LEVEL, ZOOM_LEVEL,
ROOM, ROOM
MAP_FILE_URL
} }

View File

@ -5,7 +5,6 @@ import {
ListMessageUserPositionInterface ListMessageUserPositionInterface
} from "../../Connexion"; } from "../../Connexion";
import {SimplePeerInterface, SimplePeer} from "../../WebRtc/SimplePeer"; import {SimplePeerInterface, SimplePeer} from "../../WebRtc/SimplePeer";
import {MAP_FILE_URL} from "../../Enum/EnvironmentVariable";
import {getMapKeyByUrl} from "../Login/LogincScene"; import {getMapKeyByUrl} from "../Login/LogincScene";
import SceneManager = Phaser.Scenes.SceneManager; import SceneManager = Phaser.Scenes.SceneManager;
import ScenePlugin = Phaser.Scenes.ScenePlugin; import ScenePlugin = Phaser.Scenes.ScenePlugin;
@ -135,7 +134,7 @@ export class GameManager {
let gameIndex = scene.getIndex(sceneKey); let gameIndex = scene.getIndex(sceneKey);
let game : Phaser.Scene = null; let game : Phaser.Scene = null;
if(gameIndex === -1){ if(gameIndex === -1){
game = new GameScene(sceneKey, `${MAP_FILE_URL}${mapUrl}`); game = new GameScene(sceneKey, mapUrl);
scene.add(sceneKey, game, false); scene.add(sceneKey, game, false);
} }
return sceneKey; return sceneKey;

View File

@ -1,14 +1,13 @@
import {GameManager, gameManager, HasMovedEvent, MapObject, StatusGameManagerEnum} from "./GameManager"; import {GameManager, gameManager, HasMovedEvent, MapObject, StatusGameManagerEnum} from "./GameManager";
import {GroupCreatedUpdatedMessageInterface, MessageUserPositionInterface} from "../../Connexion"; import {GroupCreatedUpdatedMessageInterface, MessageUserPositionInterface} from "../../Connexion";
import {CurrentGamerInterface, GamerInterface, hasMovedEventName, Player} from "../Player/Player"; import {CurrentGamerInterface, GamerInterface, hasMovedEventName, Player} from "../Player/Player";
import { DEBUG_MODE, MAP_FILE_URL, RESOLUTION, ROOM, ZOOM_LEVEL} from "../../Enum/EnvironmentVariable"; import { DEBUG_MODE, RESOLUTION, ROOM, ZOOM_LEVEL} from "../../Enum/EnvironmentVariable";
import {ITiledMap, ITiledMapLayer, ITiledTileSet} from "../Map/ITiledMap"; import {ITiledMap, ITiledMapLayer, ITiledTileSet} from "../Map/ITiledMap";
import {PLAYER_RESOURCES} from "../Entity/PlayableCaracter"; import {PLAYER_RESOURCES} from "../Entity/PlayableCaracter";
import Texture = Phaser.Textures.Texture; import Texture = Phaser.Textures.Texture;
import Sprite = Phaser.GameObjects.Sprite; import Sprite = Phaser.GameObjects.Sprite;
import CanvasTexture = Phaser.Textures.CanvasTexture; import CanvasTexture = Phaser.Textures.CanvasTexture;
import CreateSceneFromObjectConfig = Phaser.Types.Scenes.CreateSceneFromObjectConfig; import CreateSceneFromObjectConfig = Phaser.Types.Scenes.CreateSceneFromObjectConfig;
import {getMapKeyByUrl} from "../Login/LogincScene";
export enum Textures { export enum Textures {
Player = "male1" Player = "male1"
@ -61,7 +60,7 @@ export class GameScene extends Phaser.Scene implements GameSceneInterface, Creat
// 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;
let url = this.MapUrlFile.substr(0, this.MapUrlFile.indexOf(`${this.MapKey}.json`)); let url = this.MapUrlFile.substr(0, this.MapUrlFile.lastIndexOf('/'));
this.map.tilesets.forEach((tileset) => { this.map.tilesets.forEach((tileset) => {
if (typeof tileset.name === 'undefined' || typeof tileset.image === 'undefined') { if (typeof tileset.name === 'undefined' || typeof tileset.image === 'undefined') {
console.warn("Don't know how to handle tileset ", tileset) console.warn("Don't know how to handle tileset ", tileset)
@ -184,20 +183,11 @@ export class GameScene extends Phaser.Scene implements GameSceneInterface, Creat
private loadNextGame(layer: ITiledMapLayer, mapWidth: number, tileWidth: number, tileHeight: number){ private loadNextGame(layer: ITiledMapLayer, mapWidth: number, tileWidth: number, tileHeight: number){
let exitSceneUrl = this.getExitSceneUrl(layer); let exitSceneUrl = this.getExitSceneUrl(layer);
let exitSceneKey = gameManager.loadMap(exitSceneUrl, this.scene); // TODO: eventually compute a relative URL
/*let exitSceneKey = getMapKeyByUrl(exitSceneUrl); let absoluteExitSceneUrl = new URL(exitSceneUrl, this.MapUrlFile).href;
console.log('absoluteExitSceneUrl ', absoluteExitSceneUrl);
let exitSceneKey = gameManager.loadMap(absoluteExitSceneUrl, this.scene);
let gameIndex = this.scene.getIndex(exitSceneKey);
let game : Phaser.Scene = null;
if(gameIndex === -1){
game = new GameScene(exitSceneKey, `${MAP_FILE_URL}${exitSceneUrl}`);
this.scene.add(exitSceneKey, game, false);
}else{
game = this.scene.get(exitSceneKey);
}
if(!game){
return;
}*/
let tiles : any = layer.data; let tiles : any = layer.data;
tiles.forEach((objectKey : number, key: number) => { tiles.forEach((objectKey : number, key: number) => {
if(objectKey === 0){ if(objectKey === 0){

View File

@ -8,9 +8,15 @@ import Rectangle = Phaser.GameObjects.Rectangle;
import {PLAYER_RESOURCES} from "../Entity/PlayableCaracter"; import {PLAYER_RESOURCES} from "../Entity/PlayableCaracter";
import {cypressAsserter} from "../../Cypress/CypressAsserter"; import {cypressAsserter} from "../../Cypress/CypressAsserter";
import {GroupCreatedUpdatedMessageInterface, MessageUserPositionInterface} from "../../Connexion"; import {GroupCreatedUpdatedMessageInterface, MessageUserPositionInterface} from "../../Connexion";
import {MAP_FILE_URL} from "../../Enum/EnvironmentVariable";
export function getMapKeyByUrl(mapUrlStart: string){ export function getMapKeyByUrl(mapUrlStart: string){
// FIXME: the key should be computed from the full URL of the map.
let startPos = mapUrlStart.indexOf('://')+3;
let endPos = mapUrlStart.indexOf(".json");
console.log('MAP KEY '+mapUrlStart.substring(startPos, endPos));
return mapUrlStart.substring(startPos, endPos);
let tab = mapUrlStart.split("/"); let tab = mapUrlStart.split("/");
return tab[tab.length -1].substr(0, tab[tab.length -1].indexOf(".json")); return tab[tab.length -1].substr(0, tab[tab.length -1].indexOf(".json"));
} }
@ -99,23 +105,40 @@ export class LogincScene extends Phaser.Scene implements GameSceneInterface {
private async login(name: string) { private async login(name: string) {
return gameManager.connect(name, this.selectedPlayer.texture.key).then(() => { return gameManager.connect(name, this.selectedPlayer.texture.key).then(() => {
// Do we have a start URL in the address bar? If so, let's redirect to this address
let mapUrl = this.findMapUrl();
if (mapUrl !== null) {
let key = gameManager.loadMap(mapUrl, this.scene);
this.scene.start(key);
return mapUrl;
} else {
// If we do not have a map address in the URL, let's ask the server for a start map.
return gameManager.loadMaps().then((scene : any) => { return gameManager.loadMaps().then((scene : any) => {
if (!scene) { if (!scene) {
return; return;
} }
let key = gameManager.loadMap(scene.mapUrlStart, this.scene); let key = gameManager.loadMap(window.location.protocol+"//"+scene.mapUrlStart, this.scene);
this.scene.start(key); this.scene.start(key);
return scene; return scene;
}).catch((err) => { }).catch((err) => {
console.error(err); console.error(err);
throw err; throw err;
}); });
}
}).catch((err) => { }).catch((err) => {
console.error(err); console.error(err);
throw err; throw err;
}); });
} }
private findMapUrl(): string|null {
let path = window.location.pathname;
if (!path.startsWith('/_/')) {
return null;
}
return window.location.protocol+'//'+path.substr(3);
}
Map: Phaser.Tilemaps.Tilemap; Map: Phaser.Tilemaps.Tilemap;
initAnimation(): void { initAnimation(): void {