Fix feedback @moufmouf strategy of maps managing by back.
This commit is contained in:
parent
68ac145882
commit
58b65030bd
@ -47,7 +47,7 @@ A few things to notice:
|
|||||||
|
|
||||||
If you have exit scene
|
If you have exit scene
|
||||||
- You must create layer "exit". The layer have cases where the gamer can switch to the next 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)
|
![](doc/images/exit_layer_map.png)
|
||||||
|
|
||||||
|
@ -47,9 +47,9 @@
|
|||||||
"opacity":1,
|
"opacity":1,
|
||||||
"properties":[
|
"properties":[
|
||||||
{
|
{
|
||||||
"name":"exitSceneKey",
|
"name":"exitSceneUrl",
|
||||||
"type":"string",
|
"type":"string",
|
||||||
"value":"floor1"
|
"value":"\/map\/files\/Floor1\/floor1.json"
|
||||||
}],
|
}],
|
||||||
"type":"tilelayer",
|
"type":"tilelayer",
|
||||||
"visible":true,
|
"visible":true,
|
||||||
|
@ -41,9 +41,9 @@
|
|||||||
"opacity":1,
|
"opacity":1,
|
||||||
"properties":[
|
"properties":[
|
||||||
{
|
{
|
||||||
"name":"exitSceneKey",
|
"name":"exitSceneUrl",
|
||||||
"type":"string",
|
"type":"string",
|
||||||
"value":"floor0"
|
"value":"\/map\/files\/Floor0\/floor0.json"
|
||||||
}],
|
}],
|
||||||
"type":"tilelayer",
|
"type":"tilelayer",
|
||||||
"visible":true,
|
"visible":true,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import {Application, Request, Response} from "express";
|
import {Application, Request, Response} from "express";
|
||||||
import Jwt from "jsonwebtoken";
|
import Jwt from "jsonwebtoken";
|
||||||
import {BAD_REQUEST, OK} from "http-status-codes";
|
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';
|
import { uuid } from 'uuidv4';
|
||||||
|
|
||||||
export class AuthenticateController{
|
export class AuthenticateController{
|
||||||
@ -26,7 +26,7 @@ export class AuthenticateController{
|
|||||||
let token = Jwt.sign({email: param.email, userId: userId}, SECRET_KEY, {expiresIn: '24h'});
|
let token = Jwt.sign({email: param.email, userId: userId}, SECRET_KEY, {expiresIn: '24h'});
|
||||||
return res.status(OK).send({
|
return res.status(OK).send({
|
||||||
token: token,
|
token: token,
|
||||||
startedRoom: {key: ROOM_STARTED, url: URL_ROOM_STARTED},
|
mapUrlStart: URL_ROOM_STARTED,
|
||||||
userId: userId,
|
userId: userId,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import express from "express";
|
import express from "express";
|
||||||
import {Application, Request, Response} from "express";
|
import {Application, Request, Response} from "express";
|
||||||
import {OK} from "http-status-codes";
|
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 {
|
export class MapController {
|
||||||
App: Application;
|
App: Application;
|
||||||
@ -20,8 +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({
|
||||||
mapStart: {key: ROOM_STARTED, url: URL_ROOM_STARTED},
|
mapUrlStart: URL_ROOM_STARTED
|
||||||
maps: ROOMS
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,11 @@
|
|||||||
const SECRET_KEY = process.env.SECRET_KEY || "THECODINGMACHINE_SECRET_KEY";
|
const SECRET_KEY = process.env.SECRET_KEY || "THECODINGMACHINE_SECRET_KEY";
|
||||||
const ROOM_STARTED = "floor0";
|
const URL_ROOM_STARTED = "/map/files/Floor0/floor0.json";
|
||||||
const URL_ROOM_STARTED = "/map/files/Floor0";
|
|
||||||
const ROOMS = [
|
|
||||||
{key: "floor0", url: "/map/files/Floor0"},
|
|
||||||
{key: "floor1", url: "/map/files/Floor1"},
|
|
||||||
]
|
|
||||||
const MINIMUM_DISTANCE = process.env.MINIMUM_DISTANCE ? Number(process.env.MINIMUM_DISTANCE) : 64;
|
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;
|
const GROUP_RADIUS = process.env.GROUP_RADIUS ? Number(process.env.GROUP_RADIUS) : 48;
|
||||||
|
|
||||||
export {
|
export {
|
||||||
SECRET_KEY,
|
SECRET_KEY,
|
||||||
ROOM_STARTED,
|
|
||||||
URL_ROOM_STARTED,
|
URL_ROOM_STARTED,
|
||||||
ROOMS,
|
|
||||||
MINIMUM_DISTANCE,
|
MINIMUM_DISTANCE,
|
||||||
GROUP_RADIUS
|
GROUP_RADIUS
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 335 KiB After Width: | Height: | Size: 318 KiB |
@ -3,6 +3,7 @@ import {GameManager} from "./Phaser/Game/GameManager";
|
|||||||
const SocketIo = require('socket.io-client');
|
const SocketIo = require('socket.io-client');
|
||||||
import Axios from "axios";
|
import Axios from "axios";
|
||||||
import {API_URL} from "./Enum/EnvironmentVariable";
|
import {API_URL} from "./Enum/EnvironmentVariable";
|
||||||
|
import {getMapKeyByUrl} from "./Phaser/Login/LogincScene";
|
||||||
|
|
||||||
enum EventMessage{
|
enum EventMessage{
|
||||||
WEBRTC_SIGNAL = "webrtc-signal",
|
WEBRTC_SIGNAL = "webrtc-signal",
|
||||||
@ -182,7 +183,8 @@ 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 = res.data.startedRoom.key;
|
|
||||||
|
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}`, {
|
||||||
|
@ -5,6 +5,7 @@ import {
|
|||||||
ListMessageUserPositionInterface
|
ListMessageUserPositionInterface
|
||||||
} from "../../Connexion";
|
} from "../../Connexion";
|
||||||
import {SimplePeerInterface, SimplePeer} from "../../WebRtc/SimplePeer";
|
import {SimplePeerInterface, SimplePeer} from "../../WebRtc/SimplePeer";
|
||||||
|
import {API_URL} from "../../Enum/EnvironmentVariable";
|
||||||
|
|
||||||
export enum StatusGameManagerEnum {
|
export enum StatusGameManagerEnum {
|
||||||
IN_PROGRESS = 1,
|
IN_PROGRESS = 1,
|
||||||
@ -30,7 +31,6 @@ export class GameManager {
|
|||||||
private playerName: string;
|
private playerName: string;
|
||||||
SimplePeer : SimplePeerInterface;
|
SimplePeer : SimplePeerInterface;
|
||||||
private characterUserSelected: string;
|
private characterUserSelected: string;
|
||||||
Maps: Array<MapObject>;
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.status = StatusGameManagerEnum.IN_PROGRESS;
|
this.status = StatusGameManagerEnum.IN_PROGRESS;
|
||||||
@ -50,7 +50,6 @@ export class GameManager {
|
|||||||
|
|
||||||
loadMaps(){
|
loadMaps(){
|
||||||
return this.ConnexionInstance.loadMaps().then((data) => {
|
return this.ConnexionInstance.loadMaps().then((data) => {
|
||||||
this.Maps = data.maps;
|
|
||||||
return data;
|
return data;
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
throw err;
|
throw err;
|
||||||
|
@ -12,6 +12,7 @@ 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"
|
||||||
@ -64,17 +65,18 @@ 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`));
|
||||||
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)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//TODO strategy to add access token
|
//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
|
//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
|
//add player png
|
||||||
PLAYER_RESOURCES.forEach((playerResource: any) => {
|
PLAYER_RESOURCES.forEach((playerResource: any) => {
|
||||||
@ -164,16 +166,17 @@ 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 properties : any = layer.properties;
|
let properties : any = layer.properties;
|
||||||
let nextSceneKey = properties.find((property:any) => property.name === "exitSceneKey");
|
let exitSceneUrl = properties.find((property:any) => property.name === "exitSceneUrl");
|
||||||
let nextMap : MapObject = gameManager.Maps.find((map: MapObject) => map.key === nextSceneKey.value);
|
|
||||||
|
|
||||||
let gameIndex = this.scene.getIndex(nextMap.key);
|
let exitSceneKey = getMapKeyByUrl(exitSceneUrl.value);
|
||||||
|
|
||||||
|
let gameIndex = this.scene.getIndex(exitSceneKey);
|
||||||
let game : Phaser.Scene = null;
|
let game : Phaser.Scene = null;
|
||||||
if(gameIndex === -1){
|
if(gameIndex === -1){
|
||||||
game = new GameScene(nextMap.key, `${API_URL}${nextMap.url}`);
|
game = new GameScene(exitSceneKey, `${API_URL}${exitSceneUrl.value}`);
|
||||||
this.scene.add(nextSceneKey, game, false);
|
this.scene.add(exitSceneKey, game, false);
|
||||||
}else{
|
}else{
|
||||||
game = this.scene.get(nextMap.key);
|
game = this.scene.get(exitSceneKey);
|
||||||
}
|
}
|
||||||
if(!game){
|
if(!game){
|
||||||
return;
|
return;
|
||||||
@ -192,7 +195,7 @@ export class GameScene extends Phaser.Scene implements GameSceneInterface, Creat
|
|||||||
yStart: (y * tileWidth),
|
yStart: (y * tileWidth),
|
||||||
xEnd: ((x +1) * tileHeight),
|
xEnd: ((x +1) * tileHeight),
|
||||||
yEnd: ((y + 1) * tileHeight),
|
yEnd: ((y + 1) * tileHeight),
|
||||||
key: nextMap.key
|
key: exitSceneKey
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,11 @@ import {cypressAsserter} from "../../Cypress/CypressAsserter";
|
|||||||
import {GroupCreatedUpdatedMessageInterface, MessageUserPositionInterface} from "../../Connexion";
|
import {GroupCreatedUpdatedMessageInterface, MessageUserPositionInterface} from "../../Connexion";
|
||||||
import {API_URL} from "../../Enum/EnvironmentVariable";
|
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
|
//todo: put this constants in a dedicated file
|
||||||
export const LoginSceneName = "LoginScene";
|
export const LoginSceneName = "LoginScene";
|
||||||
enum LoginTextures {
|
enum LoginTextures {
|
||||||
@ -98,9 +103,10 @@ export class LogincScene extends Phaser.Scene implements GameSceneInterface {
|
|||||||
if (!scene) {
|
if (!scene) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let game = new GameScene(scene.mapStart.key, `${API_URL}${scene.mapStart.url}`);
|
let key = getMapKeyByUrl(scene.mapUrlStart);
|
||||||
this.scene.add(scene.mapStart.key, game, false);
|
let game = new GameScene(key,`${API_URL}${scene.mapUrlStart}`);
|
||||||
this.scene.start(scene.mapStart.key);
|
this.scene.add(key, game, false);
|
||||||
|
this.scene.start(key);
|
||||||
return scene;
|
return scene;
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
Loading…
Reference in New Issue
Block a user