From c2b3d23ec0a53166a381515f5952366d79876f82 Mon Sep 17 00:00:00 2001 From: GRL Date: Fri, 20 Aug 2021 09:49:37 +0200 Subject: [PATCH] Player return a the same position when after editing his profile (same as reconnection) --- front/src/Phaser/Game/GameManager.ts | 12 +------ front/src/Phaser/Game/GameScene.ts | 50 ++++++++++++++-------------- 2 files changed, 26 insertions(+), 36 deletions(-) diff --git a/front/src/Phaser/Game/GameManager.ts b/front/src/Phaser/Game/GameManager.ts index 265f4bd9..df527f9b 100644 --- a/front/src/Phaser/Game/GameManager.ts +++ b/front/src/Phaser/Game/GameManager.ts @@ -17,7 +17,6 @@ export class GameManager { private playerName: string | null; private characterLayers: string[] | null; private companion: string | null; - private positionBeforeSleep: { scene: string; x: number; y: number } | undefined; private startRoom!: Room; private scenePlugin!: Phaser.Scenes.ScenePlugin; currentGameSceneName: string | null = null; @@ -71,10 +70,6 @@ export class GameManager { return this.companion; } - getPositionBeforeSleep(): { scene: string; x: number; y: number } | undefined { - return this.positionBeforeSleep; - } - public loadMap(room: Room) { const roomID = room.key; @@ -113,12 +108,7 @@ export class GameManager { if (this.currentGameSceneName === null) throw "No current scene id set!"; const gameScene: GameScene = this.scenePlugin.get(this.currentGameSceneName) as GameScene; gameScene.cleanupClosingScene(); - this.positionBeforeSleep = { - scene: gameScene.roomUrl, - x: gameScene.CurrentPlayer.x, - y: gameScene.CurrentPlayer.y, - }; - this.scenePlugin.stop(this.currentGameSceneName); + gameScene.createSuccessorGameScene(false, false); this.scenePlugin.sleep(MenuSceneName); if (!this.scenePlugin.get(targetSceneName)) { this.scenePlugin.add(targetSceneName, sceneClass, false); diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 863fc4cd..f6a75b65 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -538,15 +538,7 @@ export class GameScene extends DirtyScene { } //notify game manager can to create currentUser in map - const positionBeforeSleep = gameManager.getPositionBeforeSleep(); - if (positionBeforeSleep && positionBeforeSleep.scene === this.room.key) { - this.createCurrentPlayer(positionBeforeSleep.x, positionBeforeSleep.y); - } else { - this.createCurrentPlayer( - this.startPositionCalculator.startPosition.x, - this.startPositionCalculator.startPosition.y - ); - } + this.createCurrentPlayer(); this.removeAllRemotePlayers(); //cleanup the list of remote players in case the scene was rebooted this.initCamera(); @@ -692,19 +684,7 @@ export class GameScene extends DirtyScene { this.connection.onServerDisconnected(() => { console.log("Player disconnected from server. Reloading scene."); this.cleanupClosingScene(); - - const gameSceneKey = "somekey" + Math.round(Math.random() * 10000); - const game: Phaser.Scene = new GameScene(this.room, this.MapUrlFile, gameSceneKey); - this.scene.add(gameSceneKey, game, true, { - initPosition: { - x: this.CurrentPlayer.x, - y: this.CurrentPlayer.y, - }, - reconnecting: true, - }); - - this.scene.stop(this.scene.key); - this.scene.remove(this.scene.key); + this.createSuccessorGameScene(true, true); }); this.connection.onActionableEvent((message) => { @@ -1491,14 +1471,14 @@ ${escapedMessage} } } - createCurrentPlayer(x: number, y: number) { + createCurrentPlayer() { //TODO create animation moving between exit and start const texturesPromise = lazyLoadPlayerCharacterTextures(this.load, this.characterLayers); try { this.CurrentPlayer = new Player( this, - x, - y, + this.startPositionCalculator.startPosition.x, + this.startPositionCalculator.startPosition.y, this.playerName, texturesPromise, PlayerAnimationDirections.Down, @@ -1936,4 +1916,24 @@ ${escapedMessage} waScaleManager.zoomModifier *= zoomFactor; biggestAvailableAreaStore.recompute(); } + + public createSuccessorGameScene(autostart: boolean, reconnecting: boolean) { + const gameSceneKey = "somekey" + Math.round(Math.random() * 10000); + const game = new GameScene(this.room, this.MapUrlFile, gameSceneKey); + this.scene.add(gameSceneKey, game, autostart, { + initPosition: { + x: this.CurrentPlayer.x, + y: this.CurrentPlayer.y, + }, + reconnecting: reconnecting, + }); + + //If new gameScene doesn't start automatically then we change the gameScene in gameManager so that it can start the new gameScene + if (!autostart) { + gameManager.gameSceneIsCreated(game); + } + + this.scene.stop(this.scene.key); + this.scene.remove(this.scene.key); + } }