From bac1e804adc9f10e79ff4cbbbff4aed92f84634a Mon Sep 17 00:00:00 2001 From: gparant Date: Tue, 7 Apr 2020 20:41:35 +0200 Subject: [PATCH] Refactor to include connexion --- front/src/Connexion.ts | 20 ++++++++----- front/src/Enum/EnvironmentVariable.ts | 4 ++- front/src/Phaser/{ => Game}/CameraManager.ts | 4 +-- front/src/Phaser/Game/GameManager.ts | 31 ++++++++++++++++++++ front/src/Phaser/{ => Game}/GameScene.ts | 16 ++++++++-- front/src/Phaser/{ => Game}/MapManager.ts | 10 ++++--- front/src/Phaser/{ => Player}/Player.ts | 18 ++++++++++-- front/src/index.ts | 9 +++--- 8 files changed, 88 insertions(+), 24 deletions(-) rename front/src/Phaser/{ => Game}/CameraManager.ts (96%) create mode 100644 front/src/Phaser/Game/GameManager.ts rename front/src/Phaser/{ => Game}/GameScene.ts (59%) rename front/src/Phaser/{ => Game}/MapManager.ts (91%) rename front/src/Phaser/{ => Player}/Player.ts (83%) diff --git a/front/src/Connexion.ts b/front/src/Connexion.ts index 4f094152..b27be366 100644 --- a/front/src/Connexion.ts +++ b/front/src/Connexion.ts @@ -1,3 +1,5 @@ +import {GameManagerInterface} from "./Phaser/Game/GameManager"; + const SocketIo = require('socket.io-client'); import Axios from "axios"; import {API_URL} from "./Enum/EnvironmentVariable"; @@ -70,8 +72,11 @@ export class Connexion { email : string; startedRoom : string; - constructor(email : string) { + GameManager: GameManagerInterface; + + constructor(email : string, GameManager: GameManagerInterface) { this.email = email; + this.GameManager = GameManager; Axios.post(`${API_URL}/login`, {email: email}) .then((res) => { this.token = res.data.token; @@ -87,9 +92,8 @@ export class Connexion { this.joinARoom(this.startedRoom); //share your first position - this.sharePosition(0, 0); + this.sharePosition(this.startedRoom, 0, 0); - //create listen event to get all data user shared by the back this.positionOfAllUser(); this.errorMessage(); @@ -114,8 +118,8 @@ export class Connexion { * @param x * @param y */ - sharePosition(x : number, y : number){ - let messageUserPosition = new MessageUserPosition(this.email, this.startedRoom, new Point(x, y)); + sharePosition(roomId : string, x : number, y : number){ + let messageUserPosition = new MessageUserPosition(this.email, roomId, new Point(x, y)); this.socket.emit('user-position', messageUserPosition.toString()); } @@ -135,8 +139,10 @@ export class Connexion { **/ positionOfAllUser(){ this.socket.on("user-position", (message : string) => { - //TODO show all user in map - console.info("user-position", message); + let data = JSON.parse(message); + data.forEach((UserPositions : any) => { + this.GameManager.sharedUserPosition(UserPositions); + }); }); } diff --git a/front/src/Enum/EnvironmentVariable.ts b/front/src/Enum/EnvironmentVariable.ts index 71934e6c..3cf52b85 100644 --- a/front/src/Enum/EnvironmentVariable.ts +++ b/front/src/Enum/EnvironmentVariable.ts @@ -1,7 +1,9 @@ const API_URL = process.env.API_URL || "http://api.workadventure.localhost"; +const ROOM = [process.env.ROOM || "THECODINGMACHINE"]; const RESOLUTION = 2; export { API_URL, - RESOLUTION + RESOLUTION, + ROOM } \ No newline at end of file diff --git a/front/src/Phaser/CameraManager.ts b/front/src/Phaser/Game/CameraManager.ts similarity index 96% rename from front/src/Phaser/CameraManager.ts rename to front/src/Phaser/Game/CameraManager.ts index 528e06ca..829bedf4 100644 --- a/front/src/Phaser/CameraManager.ts +++ b/front/src/Phaser/Game/CameraManager.ts @@ -1,5 +1,5 @@ -import {RESOLUTION} from "../Enum/EnvironmentVariable"; -import {Player} from "./Player"; +import {RESOLUTION} from "../../Enum/EnvironmentVariable"; +import {Player} from "../Player/Player"; import {MapManagerInterface} from "./MapManager"; export interface CameraManagerInterface { diff --git a/front/src/Phaser/Game/GameManager.ts b/front/src/Phaser/Game/GameManager.ts new file mode 100644 index 00000000..ff9f5b5f --- /dev/null +++ b/front/src/Phaser/Game/GameManager.ts @@ -0,0 +1,31 @@ +import {GameSceneInterface, GameScene} from "./GameScene"; +import {ROOM} from "../../Enum/EnvironmentVariable" +import {Connexion} from "../../Connexion"; + +export let ConnexionInstance : Connexion; + +export interface GameManagerInterface { + GameScenes: Array; + + sharedUserPosition(UserPositions: any): void; +} +export class GameManager implements GameManagerInterface { + GameScenes: Array = []; + + constructor() { + this.configureGame(); + ConnexionInstance = new Connexion("test@gmail.com", this); + } + + configureGame() { + ROOM.forEach((roomId) => { + let newGame = new GameScene(roomId, this); + this.GameScenes.push(newGame); + }); + } + + sharedUserPosition(UserPositions: any) { + let Game: GameSceneInterface = this.GameScenes.find((Game: GameSceneInterface) => Game.RoomId === UserPositions.roomId); + Game.sharedUserPosition(UserPositions) + } +} \ No newline at end of file diff --git a/front/src/Phaser/GameScene.ts b/front/src/Phaser/Game/GameScene.ts similarity index 59% rename from front/src/Phaser/GameScene.ts rename to front/src/Phaser/Game/GameScene.ts index 4f2eb9cc..947da7bd 100644 --- a/front/src/Phaser/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -1,12 +1,19 @@ import {MapManagerInterface, MapManager} from "./MapManager"; +import {GameManagerInterface} from "./GameManager"; -export class GameScene extends Phaser.Scene { +export interface GameSceneInterface extends Phaser.Scene { + RoomId : string; + sharedUserPosition(data : []): void; +} +export class GameScene extends Phaser.Scene implements GameSceneInterface{ private MapManager : MapManagerInterface; + RoomId : string; - constructor() { + constructor(RoomId : string, GameManager : GameManagerInterface) { super({ key: "GameScene" }); + this.RoomId = RoomId; } //hook preload scene @@ -32,4 +39,9 @@ export class GameScene extends Phaser.Scene { update(dt: number): void { this.MapManager.update(); } + + sharedUserPosition(data: []): void { + //TODO share position of all user + //console.log("sharedUserPosition", data); + } } diff --git a/front/src/Phaser/MapManager.ts b/front/src/Phaser/Game/MapManager.ts similarity index 91% rename from front/src/Phaser/MapManager.ts rename to front/src/Phaser/Game/MapManager.ts index ecd86210..f12a32d1 100644 --- a/front/src/Phaser/MapManager.ts +++ b/front/src/Phaser/Game/MapManager.ts @@ -1,6 +1,7 @@ import {CameraManager, CameraManagerInterface} from "./CameraManager"; -import {RESOLUTION} from "../Enum/EnvironmentVariable"; -import {Player} from "./Player"; +import {RESOLUTION} from "../../Enum/EnvironmentVariable"; +import {Player} from "../Player/Player"; +import {GameScene, GameSceneInterface} from "./GameScene"; export interface MapManagerInterface { keyZ: Phaser.Input.Keyboard.Key; @@ -16,6 +17,7 @@ export interface MapManagerInterface { Map: Phaser.Tilemaps.Tilemap; Terrain: Phaser.Tilemaps.Tileset; Camera: CameraManagerInterface; + Scene: GameSceneInterface; update(): void; } export class MapManager implements MapManagerInterface{ @@ -32,12 +34,12 @@ export class MapManager implements MapManagerInterface{ Terrain : Phaser.Tilemaps.Tileset; Camera: CameraManagerInterface; CurrentPlayer: Player; - Scene: Phaser.Scene; + Scene: GameSceneInterface; Map: Phaser.Tilemaps.Tilemap; startX = (window.innerWidth / 2) / RESOLUTION; startY = (window.innerHeight / 2) / RESOLUTION; - constructor(scene: Phaser.Scene){ + constructor(scene: GameSceneInterface){ this.Scene = scene; //initalise map diff --git a/front/src/Phaser/Player.ts b/front/src/Phaser/Player/Player.ts similarity index 83% rename from front/src/Phaser/Player.ts rename to front/src/Phaser/Player/Player.ts index f76778a4..ebfc19b0 100644 --- a/front/src/Phaser/Player.ts +++ b/front/src/Phaser/Player/Player.ts @@ -1,12 +1,16 @@ -import {MapManagerInterface} from "./MapManager"; -import {getPlayerAnimations, playAnimation, PlayerAnimationNames} from "./Player/Animation"; +import {MapManagerInterface} from "../Game/MapManager"; +import {getPlayerAnimations, playAnimation, PlayerAnimationNames} from "./Animation"; +import {Connexion} from "../../Connexion"; +import {GameSceneInterface} from "../Game/GameScene"; +import {ConnexionInstance} from "../Game/GameManager"; export class Player extends Phaser.GameObjects.Sprite{ MapManager : MapManagerInterface; PlayerValue : string; + Connexion: Connexion; constructor( - Scene : Phaser.Scene, + Scene : GameSceneInterface, x : number, y : number, MapManager: MapManagerInterface, @@ -69,6 +73,14 @@ export class Player extends Phaser.GameObjects.Sprite{ } if(!haveMove){ playAnimation(this, PlayerAnimationNames.None); + }else{ + this.sharePosition(); + } + } + + private sharePosition(){ + if(ConnexionInstance) { + ConnexionInstance.sharePosition((this.scene as GameSceneInterface).RoomId, this.x, this.y); } } diff --git a/front/src/index.ts b/front/src/index.ts index f0f5107d..650fd52c 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -1,15 +1,16 @@ import 'phaser'; import GameConfig = Phaser.Types.Core.GameConfig; -import {GameScene} from "./Phaser/GameScene"; -import {Connexion} from "./Connexion"; +import {GameManager} from "./Phaser/Game/GameManager"; import {RESOLUTION} from "./Enum/EnvironmentVariable"; +let gameManager = new GameManager(); + const config: GameConfig = { title: "Office game", width: window.innerWidth / RESOLUTION, height: window.innerHeight / RESOLUTION, parent: "game", - scene: [GameScene], + scene: gameManager.GameScenes, zoom: RESOLUTION, }; @@ -18,5 +19,3 @@ let game = new Phaser.Game(config); window.addEventListener('resize', function (event) { game.scale.resize(window.innerWidth / RESOLUTION, window.innerHeight / RESOLUTION); }); - -const connexion = new Connexion("test@gmail.com");