Player return a the same position when after editing his profile

This commit is contained in:
GRL 2021-08-19 17:22:16 +02:00
parent 5fa8c1de9a
commit 0c796dff90
2 changed files with 26 additions and 8 deletions

View File

@ -17,6 +17,7 @@ export class GameManager {
private playerName: string | null; private playerName: string | null;
private characterLayers: string[] | null; private characterLayers: string[] | null;
private companion: string | null; private companion: string | null;
private positionBeforeSleep: { scene: string; x: number; y: number } | undefined;
private startRoom!: Room; private startRoom!: Room;
private scenePlugin!: Phaser.Scenes.ScenePlugin; private scenePlugin!: Phaser.Scenes.ScenePlugin;
currentGameSceneName: string | null = null; currentGameSceneName: string | null = null;
@ -70,6 +71,10 @@ export class GameManager {
return this.companion; return this.companion;
} }
getPositionBeforeSleep(): { scene: string; x: number; y: number } | undefined {
return this.positionBeforeSleep;
}
public loadMap(room: Room) { public loadMap(room: Room) {
const roomID = room.key; const roomID = room.key;
@ -108,6 +113,11 @@ export class GameManager {
if (this.currentGameSceneName === null) throw "No current scene id set!"; if (this.currentGameSceneName === null) throw "No current scene id set!";
const gameScene: GameScene = this.scenePlugin.get(this.currentGameSceneName) as GameScene; const gameScene: GameScene = this.scenePlugin.get(this.currentGameSceneName) as GameScene;
gameScene.cleanupClosingScene(); gameScene.cleanupClosingScene();
this.positionBeforeSleep = {
scene: gameScene.roomUrl,
x: gameScene.CurrentPlayer.x,
y: gameScene.CurrentPlayer.y,
};
this.scenePlugin.stop(this.currentGameSceneName); this.scenePlugin.stop(this.currentGameSceneName);
this.scenePlugin.sleep(MenuSceneName); this.scenePlugin.sleep(MenuSceneName);
if (!this.scenePlugin.get(targetSceneName)) { if (!this.scenePlugin.get(targetSceneName)) {

View File

@ -92,9 +92,7 @@ import { PropertyUtils } from "../Map/PropertyUtils";
import Tileset = Phaser.Tilemaps.Tileset; import Tileset = Phaser.Tilemaps.Tileset;
import { userIsAdminStore } from "../../Stores/GameStore"; import { userIsAdminStore } from "../../Stores/GameStore";
import { layoutManagerActionStore } from "../../Stores/LayoutManagerStore"; import { layoutManagerActionStore } from "../../Stores/LayoutManagerStore";
import { get } from "svelte/store";
import { EmbeddedWebsiteManager } from "./EmbeddedWebsiteManager"; import { EmbeddedWebsiteManager } from "./EmbeddedWebsiteManager";
import { helpCameraSettingsVisibleStore } from "../../Stores/HelpCameraSettingsStore";
export interface GameSceneInitInterface { export interface GameSceneInitInterface {
initPosition: PointInterface | null; initPosition: PointInterface | null;
@ -540,7 +538,15 @@ export class GameScene extends DirtyScene {
} }
//notify game manager can to create currentUser in map //notify game manager can to create currentUser in map
this.createCurrentPlayer(); 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.removeAllRemotePlayers(); //cleanup the list of remote players in case the scene was rebooted this.removeAllRemotePlayers(); //cleanup the list of remote players in case the scene was rebooted
this.initCamera(); this.initCamera();
@ -760,8 +766,10 @@ export class GameScene extends DirtyScene {
this.connectionAnswerPromiseResolve(onConnect.room); this.connectionAnswerPromiseResolve(onConnect.room);
// Analyze tags to find if we are admin. If yes, show console. // Analyze tags to find if we are admin. If yes, show console.
this.scene.wake(); if (this.scene.isSleeping()) {
this.scene.stop(ReconnectingSceneName); this.scene.wake();
this.scene.stop(ReconnectingSceneName);
}
//init user position and play trigger to check layers properties //init user position and play trigger to check layers properties
this.gameMap.setPosition(this.CurrentPlayer.x, this.CurrentPlayer.y); this.gameMap.setPosition(this.CurrentPlayer.x, this.CurrentPlayer.y);
@ -1483,14 +1491,14 @@ ${escapedMessage}
} }
} }
createCurrentPlayer() { createCurrentPlayer(x: number, y: number) {
//TODO create animation moving between exit and start //TODO create animation moving between exit and start
const texturesPromise = lazyLoadPlayerCharacterTextures(this.load, this.characterLayers); const texturesPromise = lazyLoadPlayerCharacterTextures(this.load, this.characterLayers);
try { try {
this.CurrentPlayer = new Player( this.CurrentPlayer = new Player(
this, this,
this.startPositionCalculator.startPosition.x, x,
this.startPositionCalculator.startPosition.y, y,
this.playerName, this.playerName,
texturesPromise, texturesPromise,
PlayerAnimationDirections.Down, PlayerAnimationDirections.Down,