Merge pull request #122 from thecodingmachine/reconnecting_scene

Adding a special scene to wait for server reconnection
This commit is contained in:
David Négrier 2020-05-23 17:12:36 +02:00 committed by GitHub
commit 080e08eeef
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 96 additions and 9 deletions

View file

@ -2,12 +2,18 @@ import {GameScene} from "./GameScene";
import {
Connexion,
GroupCreatedUpdatedMessageInterface,
ListMessageUserPositionInterface, MessageUserJoined, MessageUserMovedInterface, MessageUserPositionInterface, Point
ListMessageUserPositionInterface,
MessageUserJoined,
MessageUserMovedInterface,
MessageUserPositionInterface,
Point,
PointInterface
} from "../../Connexion";
import {SimplePeerInterface, SimplePeer} from "../../WebRtc/SimplePeer";
import {getMapKeyByUrl} from "../Login/LogincScene";
import ScenePlugin = Phaser.Scenes.ScenePlugin;
import {AddPlayerInterface} from "./AddPlayerInterface";
import {ReconnectingSceneName} from "../Reconnecting/ReconnectingScene";
export enum StatusGameManagerEnum {
IN_PROGRESS = 1,
@ -174,6 +180,16 @@ export class GameManager {
}
return sceneKey;
}
private oldSceneKey : string;
switchToDisconnectedScene(): void {
this.oldSceneKey = this.currentGameScene.scene.key;
this.currentGameScene.scene.start(ReconnectingSceneName);
}
reconnectToGameScene(lastPositionShared: PointInterface) {
this.currentGameScene.scene.start(this.oldSceneKey, { initPosition: lastPositionShared });
}
}
export const gameManager = new GameManager();

View file

@ -2,7 +2,7 @@ import {GameManager, gameManager, HasMovedEvent} from "./GameManager";
import {
GroupCreatedUpdatedMessageInterface,
MessageUserMovedInterface,
MessageUserPositionInterface
MessageUserPositionInterface, PointInterface, PositionInterface
} from "../../Connexion";
import {CurrentGamerInterface, GamerInterface, hasMovedEventName, Player} from "../Player/Player";
import { DEBUG_MODE, ZOOM_LEVEL} from "../../Enum/EnvironmentVariable";
@ -18,6 +18,10 @@ export enum Textures {
Player = "male1"
}
interface GameSceneInitInterface {
initPosition: PointInterface|null
}
export class GameScene extends Phaser.Scene {
GameManager : GameManager;
Terrains : Array<Phaser.Tilemaps.Tileset>;
@ -32,6 +36,7 @@ export class GameScene extends Phaser.Scene {
startX = 704;// 22 case
startY = 32; // 1 case
circleTexture: CanvasTexture;
initPosition: PositionInterface;
MapKey: string;
MapUrlFile: string;
@ -84,7 +89,9 @@ export class GameScene extends Phaser.Scene {
}
//hook initialisation
init() {}
init(initData : GameSceneInitInterface) {
this.initPosition = initData.initPosition;
}
//hook create scene
create(): void {
@ -208,7 +215,13 @@ export class GameScene extends Phaser.Scene {
/**
* @param layer
*/
private startUser(layer: ITiledMapLayer){
private startUser(layer: ITiledMapLayer): void {
if (this.initPosition !== undefined) {
this.startX = this.initPosition.x;
this.startY = this.initPosition.y;
return;
}
let tiles : any = layer.data;
tiles.forEach((objectKey : number, key: number) => {
if(objectKey === 0){