Fix integration login scene in game manager
authorgparant <g.parant@thecodingmachine.com>
Tue, 28 Apr 2020 22:01:37 +0000 (00:01 +0200)
committergparant <g.parant@thecodingmachine.com>
Tue, 28 Apr 2020 22:01:37 +0000 (00:01 +0200)
front/src/Phaser/Game/GameManager.ts
front/src/Phaser/Login/LogincScene.ts
front/src/index.ts

index fe04a950d74210dff1fcfcc54d8948cef97344af..52f0805685c8c82dd133b09705b9d4947234f580 100644 (file)
@@ -2,6 +2,7 @@ import {GameSceneInterface, GameScene} from "./GameScene";
 import {ROOM} from "../../Enum/EnvironmentVariable"
 import {Connexion, ConnexionInterface, ListMessageUserPositionInterface} from "../../Connexion";
 import {SimplePeerInterface, SimplePeer} from "../../WebRtc/SimplePeer";
+import {LogincScene} from "../Login/LogincScene";
 
 export enum StatusGameManagerEnum {
     IN_PROGRESS = 1,
@@ -16,6 +17,7 @@ export interface GameManagerInterface {
     SimplePeer: SimplePeerInterface;
     createCurrentPlayer() : void;
     shareUserPosition(ListMessageUserPosition : ListMessageUserPositionInterface): void;
+    connect(email : string) : Promise<any>;
 }
 export class GameManager implements GameManagerInterface {
     GameScenes: Array<GameSceneInterface> = [];
@@ -27,15 +29,26 @@ export class GameManager implements GameManagerInterface {
         this.configureGame();
     }
 
-    connect(email:string) {
+    /**
+     *
+     * @param email
+     */
+    connect(email : string) : Promise<any> {
         ConnexionInstance = new Connexion(email, this);
-        this.SimplePeer = new SimplePeer(ConnexionInstance);
+        return ConnexionInstance.createConnexion().then(() => {
+            this.SimplePeer = new SimplePeer(ConnexionInstance);
+        });
     }
 
     /**
      * permit to config rooms
      */
     configureGame() {
+        //create login scene
+        let LoginScene = new LogincScene();
+        this.GameScenes.push(LoginScene)
+
+        //create scene
         ROOM.forEach((roomId) => {
             let newGame = new GameScene(roomId, this);
             this.GameScenes.push((newGame as GameSceneInterface));
@@ -43,13 +56,14 @@ export class GameManager implements GameManagerInterface {
     }
 
     /**
-     * Permit to create player in started room
-     * @param RoomId
-     * @param UserId
+     *
      */
     createCurrentPlayer(): void {
         //Get started room send by the backend
         let game: GameSceneInterface = this.GameScenes.find((Game: GameSceneInterface) => Game.RoomId === ConnexionInstance.startedRoom);
+        if(!game){
+            return;
+        }
         game.createCurrentPlayer(ConnexionInstance.userId);
         this.status = StatusGameManagerEnum.CURRENT_USER_CREATED;
     }
index 0fb4d2a49eea843110004d7070a05af97fe17d37..1aa1e0af138780c63f53b7c8a6ac2cb2f1052001 100644 (file)
@@ -1,9 +1,9 @@
-import KeyboardKeydownCallback = Phaser.Types.Input.Keyboard.KeyboardKeydownCallback;
 import {gameManager} from "../Game/GameManager";
-import {ROOM} from "../../Enum/EnvironmentVariable";
 import {TextField} from "../Components/TextField";
 import {TextInput} from "../Components/TextInput";
 import {ClickButton} from "../Components/ClickButton";
+import {GameSceneInterface} from "../Game/GameScene";
+import {MessageUserPositionInterface} from "../../Connexion";
 
 //todo: put this constants in a dedicated file
 export const LoginSceneName = "LoginScene";
@@ -11,21 +11,22 @@ enum LoginTextures {
     playButton = "play_button",
 }
 
-export class LogincScene extends Phaser.Scene {
+export class LogincScene extends Phaser.Scene  implements GameSceneInterface {
     private emailInput: TextInput;
     private textField: TextField;
     private playButton: ClickButton;
     private infoTextField: TextField;
+
     constructor() {
         super({
             key: LoginSceneName
         });
     }
-    
+
     preload() {
         this.load.image(LoginTextures.playButton, "resources/objects/play_button.png");
     }
-    
+
     create() {
         this.textField = new TextField(this, 10, 10, 'Enter your email:');
         this.emailInput = new TextInput(this, 10, 50);
@@ -37,15 +38,25 @@ export class LogincScene extends Phaser.Scene {
         let infoText = "Commandes de base: \n - Z,Q,S,D (ou les flèches de direction) pour bouger\n - SHIFT pour accélerer";
         this.infoTextField = new TextField(this, 10, 300, infoText);
     }
-    
+
     update(time: number, delta: number): void {
-        
+
     }
-    
+
     async login() {
         let email = this.emailInput.text;
         if (!email) return;
-        await gameManager.connect(email);
-        this.scene.start("GameScene");
+        gameManager.connect(email).then(() => {
+            this.scene.start("GameScene");
+        });
+    }
+
+    Map: Phaser.Tilemaps.Tilemap;
+    RoomId: string;
+
+    createCurrentPlayer(UserId: string): void {
+    }
+
+    shareUserPosition(UsersPosition: Array<MessageUserPositionInterface>): void {
     }
 }
\ No newline at end of file
index c55a5d0db6741fc8007c326f8d28a50e222385cd..09fd978221a36795925e1c507637537e388a8310 100644 (file)
@@ -10,7 +10,7 @@ const config: GameConfig = {
     width: window.innerWidth / RESOLUTION,
     height: window.innerHeight / RESOLUTION,
     parent: "game",
-    scene: [LogincScene, ...gameManager.GameScenes as any],
+    scene: gameManager.GameScenes,
     zoom: RESOLUTION,
     physics: {
         default: "arcade",