If you have exit scene
- You must create layer "exit". The layer have cases where the gamer can switch to the next scene.
-- In layer properties, you must add "exitSceneKey" property. It represent a key map of the next scene. Be careful, if you want that the next map will be correctly loaded, you must check that the map exists in the list of the maps application. The variable that represents maps in the application is "ROOMS" constant variable.
+- In layer properties, you must add "exitSceneUrl" property. It represents a url map of the next scene. Be careful, if you want that the next map will be correctly loaded, you must check that the map files are in folder `back/src/Assets/Maps/<your map folder>`. The files will be accessible by url `<HOST>/map/files/<your map folder>/...`.
![](doc/images/exit_layer_map.png)
"opacity":1,
"properties":[
{
- "name":"exitSceneKey",
+ "name":"exitSceneUrl",
"type":"string",
- "value":"floor1"
+ "value":"\/map\/files\/Floor1\/floor1.json"
}],
"type":"tilelayer",
"visible":true,
"opacity":1,
"properties":[
{
- "name":"exitSceneKey",
+ "name":"exitSceneUrl",
"type":"string",
- "value":"floor0"
+ "value":"\/map\/files\/Floor0\/floor0.json"
}],
"type":"tilelayer",
"visible":true,
import {Application, Request, Response} from "express";
import Jwt from "jsonwebtoken";
import {BAD_REQUEST, OK} from "http-status-codes";
-import {SECRET_KEY, ROOM_STARTED, URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..."
+import {SECRET_KEY, URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..."
import { uuid } from 'uuidv4';
export class AuthenticateController{
let token = Jwt.sign({email: param.email, userId: userId}, SECRET_KEY, {expiresIn: '24h'});
return res.status(OK).send({
token: token,
- startedRoom: {key: ROOM_STARTED, url: URL_ROOM_STARTED},
+ mapUrlStart: URL_ROOM_STARTED,
userId: userId,
});
});
import express from "express";
import {Application, Request, Response} from "express";
import {OK} from "http-status-codes";
-import {ROOM_STARTED, ROOMS, URL_ROOM_STARTED} from "../Enum/EnvironmentVariable";
+import {URL_ROOM_STARTED} from "../Enum/EnvironmentVariable";
export class MapController {
App: Application;
getMaps() {
this.App.get("/maps", (req: Request, res: Response) => {
return res.status(OK).send({
- mapStart: {key: ROOM_STARTED, url: URL_ROOM_STARTED},
- maps: ROOMS
+ mapUrlStart: URL_ROOM_STARTED
});
});
}
const SECRET_KEY = process.env.SECRET_KEY || "THECODINGMACHINE_SECRET_KEY";
-const ROOM_STARTED = "floor0";
-const URL_ROOM_STARTED = "/map/files/Floor0";
-const ROOMS = [
- {key: "floor0", url: "/map/files/Floor0"},
- {key: "floor1", url: "/map/files/Floor1"},
-]
+const URL_ROOM_STARTED = "/map/files/Floor0/floor0.json";
const MINIMUM_DISTANCE = process.env.MINIMUM_DISTANCE ? Number(process.env.MINIMUM_DISTANCE) : 64;
const GROUP_RADIUS = process.env.GROUP_RADIUS ? Number(process.env.GROUP_RADIUS) : 48;
export {
SECRET_KEY,
- ROOM_STARTED,
URL_ROOM_STARTED,
- ROOMS,
MINIMUM_DISTANCE,
GROUP_RADIUS
}
const SocketIo = require('socket.io-client');
import Axios from "axios";
import {API_URL} from "./Enum/EnvironmentVariable";
+import {getMapKeyByUrl} from "./Phaser/Login/LogincScene";
enum EventMessage{
WEBRTC_SIGNAL = "webrtc-signal",
return Axios.post(`${API_URL}/login`, {email: this.email})
.then((res) => {
this.token = res.data.token;
- this.startedRoom = res.data.startedRoom.key;
+
+ this.startedRoom = getMapKeyByUrl(res.data.mapUrlStart);
this.userId = res.data.userId;
this.socket = SocketIo(`${API_URL}`, {
ListMessageUserPositionInterface
} from "../../Connexion";
import {SimplePeerInterface, SimplePeer} from "../../WebRtc/SimplePeer";
+import {API_URL} from "../../Enum/EnvironmentVariable";
export enum StatusGameManagerEnum {
IN_PROGRESS = 1,
private playerName: string;
SimplePeer : SimplePeerInterface;
private characterUserSelected: string;
- Maps: Array<MapObject>;
constructor() {
this.status = StatusGameManagerEnum.IN_PROGRESS;
loadMaps(){
return this.ConnexionInstance.loadMaps().then((data) => {
- this.Maps = data.maps;
return data;
}).catch((err) => {
throw err;
import Sprite = Phaser.GameObjects.Sprite;
import CanvasTexture = Phaser.Textures.CanvasTexture;
import CreateSceneFromObjectConfig = Phaser.Types.Scenes.CreateSceneFromObjectConfig;
+import {getMapKeyByUrl} from "../Login/LogincScene";
export enum Textures {
Player = "male1"
// 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.indexOf(`${this.MapKey}.json`));
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, `${this.MapUrlFile}/${tileset.image}`);
+ this.load.image(tileset.name, `${url}/${tileset.image}`);
})
});
//TODO strategy to add access token
- this.load.tilemapTiledJSON(this.MapKey, `${this.MapUrlFile}/${this.MapKey}.json`);
+ this.load.tilemapTiledJSON(this.MapKey, this.MapUrlFile);
//add player png
PLAYER_RESOURCES.forEach((playerResource: any) => {
*/
private loadNextGame(layer: ITiledMapLayer, mapWidth: number, tileWidth: number, tileHeight: number){
let properties : any = layer.properties;
- let nextSceneKey = properties.find((property:any) => property.name === "exitSceneKey");
- let nextMap : MapObject = gameManager.Maps.find((map: MapObject) => map.key === nextSceneKey.value);
+ let exitSceneUrl = properties.find((property:any) => property.name === "exitSceneUrl");
- let gameIndex = this.scene.getIndex(nextMap.key);
+ let exitSceneKey = getMapKeyByUrl(exitSceneUrl.value);
+
+ let gameIndex = this.scene.getIndex(exitSceneKey);
let game : Phaser.Scene = null;
if(gameIndex === -1){
- game = new GameScene(nextMap.key, `${API_URL}${nextMap.url}`);
- this.scene.add(nextSceneKey, game, false);
+ game = new GameScene(exitSceneKey, `${API_URL}${exitSceneUrl.value}`);
+ this.scene.add(exitSceneKey, game, false);
}else{
- game = this.scene.get(nextMap.key);
+ game = this.scene.get(exitSceneKey);
}
if(!game){
return;
yStart: (y * tileWidth),
xEnd: ((x +1) * tileHeight),
yEnd: ((y + 1) * tileHeight),
- key: nextMap.key
+ key: exitSceneKey
})
});
}
import {GroupCreatedUpdatedMessageInterface, MessageUserPositionInterface} from "../../Connexion";
import {API_URL} from "../../Enum/EnvironmentVariable";
+export function getMapKeyByUrl(mapUrlStart: string){
+ let tab = mapUrlStart.split("/");
+ return tab[tab.length -1].substr(0, tab[tab.length -1].indexOf(".json"));
+}
+
//todo: put this constants in a dedicated file
export const LoginSceneName = "LoginScene";
enum LoginTextures {
if (!scene) {
return;
}
- let game = new GameScene(scene.mapStart.key, `${API_URL}${scene.mapStart.url}`);
- this.scene.add(scene.mapStart.key, game, false);
- this.scene.start(scene.mapStart.key);
+ let key = getMapKeyByUrl(scene.mapUrlStart);
+ let game = new GameScene(key,`${API_URL}${scene.mapUrlStart}`);
+ this.scene.add(key, game, false);
+ this.scene.start(key);
return scene;
}).catch((err) => {
console.error(err);