Moving back to using ScenePlugin and adding EntryScene
This commit is contained in:
parent
2852f204f5
commit
0731bd39e5
6 changed files with 65 additions and 32 deletions
|
@ -14,18 +14,10 @@ export class GameManager {
|
||||||
private playerName!: string;
|
private playerName!: string;
|
||||||
private characterLayers!: string[];
|
private characterLayers!: string[];
|
||||||
private startRoom!:Room;
|
private startRoom!:Room;
|
||||||
private sceneManager!: Phaser.Scenes.SceneManager;
|
|
||||||
|
|
||||||
public async init(sceneManager: Phaser.Scenes.SceneManager) {
|
public async init(scenePlugin: Phaser.Scenes.ScenePlugin) {
|
||||||
this.sceneManager = sceneManager;
|
this.startRoom = await connectionManager.initGameConnexion();
|
||||||
try {
|
this.loadMap(this.startRoom.url, this.startRoom.ID, scenePlugin);
|
||||||
this.startRoom = await connectionManager.initGameConnexion();
|
|
||||||
} catch (e) {
|
|
||||||
this.sceneManager.start(FourOFourSceneName, {
|
|
||||||
url: window.location.pathname.toString()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this.loadMap(this.startRoom.url, this.startRoom.ID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public setPlayerName(name: string): void {
|
public setPlayerName(name: string): void {
|
||||||
|
@ -49,12 +41,13 @@ export class GameManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public loadMap(mapUrl: string, roomID: string): void {
|
public loadMap(mapUrl: string, roomID: string, scenePlugin: Phaser.Scenes.ScenePlugin): void {
|
||||||
console.log('Loading map '+roomID+' at url '+mapUrl);
|
console.log('Loading map '+roomID+' at url '+mapUrl);
|
||||||
const gameIndex = this.sceneManager.getIndex(roomID);
|
const gameIndex = scenePlugin.getIndex(mapUrl);
|
||||||
if(gameIndex === -1){
|
if(gameIndex === -1){
|
||||||
const game : Phaser.Scene = GameScene.createFromUrl(mapUrl, roomID);
|
const game : Phaser.Scene = GameScene.createFromUrl(mapUrl, roomID);
|
||||||
this.sceneManager.add(roomID, game, false);
|
console.log('Adding scene '+mapUrl);
|
||||||
|
scenePlugin.add(mapUrl, game, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,8 +58,9 @@ export class GameManager {
|
||||||
return mapUrlStart.substring(startPos, endPos);
|
return mapUrlStart.substring(startPos, endPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async goToStartingMap() {
|
public async goToStartingMap(scenePlugin: Phaser.Scenes.ScenePlugin) {
|
||||||
this.sceneManager.start(this.startRoom.ID, {startLayerName: 'global'});
|
console.log('Starting scene '+this.startRoom.url);
|
||||||
|
scenePlugin.start(this.startRoom.url, {startLayerName: 'global'});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -139,11 +139,11 @@ export class GameScene extends ResizableScene implements CenterListener {
|
||||||
private userInputManager!: UserInputManager;
|
private userInputManager!: UserInputManager;
|
||||||
|
|
||||||
static createFromUrl(mapUrlFile: string, instance: string, gameSceneKey: string|null = null): GameScene {
|
static createFromUrl(mapUrlFile: string, instance: string, gameSceneKey: string|null = null): GameScene {
|
||||||
const mapKey = gameManager.getMapKeyByUrl(mapUrlFile);
|
// We use the map URL as a key
|
||||||
if (gameSceneKey === null) {
|
if (gameSceneKey === null) {
|
||||||
gameSceneKey = mapKey;
|
gameSceneKey = mapUrlFile;
|
||||||
}
|
}
|
||||||
return new GameScene(mapKey, mapUrlFile, instance, gameSceneKey);
|
return new GameScene(mapUrlFile, mapUrlFile, instance, gameSceneKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(MapKey : string, MapUrlFile: string, instance: string, gameSceneKey: string) {
|
constructor(MapKey : string, MapUrlFile: string, instance: string, gameSceneKey: string) {
|
||||||
|
@ -691,7 +691,7 @@ export class GameScene extends ResizableScene implements CenterListener {
|
||||||
|
|
||||||
// TODO: eventually compute a relative URL
|
// TODO: eventually compute a relative URL
|
||||||
const absoluteExitSceneUrl = new URL(exitSceneUrl, this.MapUrlFile).href;
|
const absoluteExitSceneUrl = new URL(exitSceneUrl, this.MapUrlFile).href;
|
||||||
gameManager.loadMap(absoluteExitSceneUrl, instance);
|
gameManager.loadMap(absoluteExitSceneUrl, instance, this.scene);
|
||||||
const exitSceneKey = instance;
|
const exitSceneKey = instance;
|
||||||
|
|
||||||
const tiles : number[] = layer.data as number[];
|
const tiles : number[] = layer.data as number[];
|
||||||
|
|
|
@ -266,7 +266,7 @@ export class EnableCameraScene extends Phaser.Scene {
|
||||||
mediaManager.stopCamera();
|
mediaManager.stopCamera();
|
||||||
mediaManager.stopMicrophone();
|
mediaManager.stopMicrophone();
|
||||||
|
|
||||||
gameManager.goToStartingMap();
|
gameManager.goToStartingMap(this.scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async getDevices() {
|
private async getDevices() {
|
||||||
|
|
40
front/src/Phaser/Login/EntryScene.ts
Normal file
40
front/src/Phaser/Login/EntryScene.ts
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
import {gameManager} from "../Game/GameManager";
|
||||||
|
import {TextField} from "../Components/TextField";
|
||||||
|
import {TextInput} from "../Components/TextInput";
|
||||||
|
import {ClickButton} from "../Components/ClickButton";
|
||||||
|
import Image = Phaser.GameObjects.Image;
|
||||||
|
import Rectangle = Phaser.GameObjects.Rectangle;
|
||||||
|
import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character";
|
||||||
|
import {cypressAsserter} from "../../Cypress/CypressAsserter";
|
||||||
|
import {SelectCharacterSceneName} from "./SelectCharacterScene";
|
||||||
|
import {ResizableScene} from "./ResizableScene";
|
||||||
|
import {Scene} from "phaser";
|
||||||
|
import {LoginSceneName} from "./LoginScene";
|
||||||
|
import {FourOFourSceneName} from "../Reconnecting/FourOFourScene";
|
||||||
|
|
||||||
|
export const EntrySceneName = "EntryScene";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The EntryScene is not a real scene. It is the first scene loaded and is only used to initialize the gameManager
|
||||||
|
* and to route to the next correct scene.
|
||||||
|
*/
|
||||||
|
export class EntryScene extends Scene {
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
key: EntrySceneName
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
preload() {
|
||||||
|
}
|
||||||
|
|
||||||
|
create() {
|
||||||
|
gameManager.init(this.scene).then(() => {
|
||||||
|
this.scene.start(LoginSceneName);
|
||||||
|
}).catch(() => {
|
||||||
|
this.scene.start(FourOFourSceneName, {
|
||||||
|
url: window.location.pathname.toString()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,7 +26,7 @@ class UrlManager {
|
||||||
public getAnonymousMapUrlStart():string {
|
public getAnonymousMapUrlStart():string {
|
||||||
const match = /\/_\/global\/(.+)/.exec(window.location.pathname.toString())
|
const match = /\/_\/global\/(.+)/.exec(window.location.pathname.toString())
|
||||||
if (!match) throw new Error('Could not extract startmap url from'+window.location.pathname);
|
if (!match) throw new Error('Could not extract startmap url from'+window.location.pathname);
|
||||||
return match[1];
|
return window.location.protocol+'//'+match[1];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ import {CustomizeScene} from "./Phaser/Login/CustomizeScene";
|
||||||
import {CoWebsiteManager} from "./WebRtc/CoWebsiteManager";
|
import {CoWebsiteManager} from "./WebRtc/CoWebsiteManager";
|
||||||
import {gameManager} from "./Phaser/Game/GameManager";
|
import {gameManager} from "./Phaser/Game/GameManager";
|
||||||
import {ResizableScene} from "./Phaser/Login/ResizableScene";
|
import {ResizableScene} from "./Phaser/Login/ResizableScene";
|
||||||
|
import {EntryScene} from "./Phaser/Login/EntryScene";
|
||||||
|
|
||||||
//CoWebsiteManager.loadCoWebsite('https://thecodingmachine.com');
|
//CoWebsiteManager.loadCoWebsite('https://thecodingmachine.com');
|
||||||
|
|
||||||
|
@ -30,7 +31,7 @@ const config: GameConfig = {
|
||||||
width: width / RESOLUTION,
|
width: width / RESOLUTION,
|
||||||
height: height / RESOLUTION,
|
height: height / RESOLUTION,
|
||||||
parent: "game",
|
parent: "game",
|
||||||
scene: [LoginScene, SelectCharacterScene, EnableCameraScene, ReconnectingScene, FourOFourScene, CustomizeScene],
|
scene: [EntryScene, LoginScene, SelectCharacterScene, EnableCameraScene, ReconnectingScene, FourOFourScene, CustomizeScene],
|
||||||
zoom: RESOLUTION,
|
zoom: RESOLUTION,
|
||||||
physics: {
|
physics: {
|
||||||
default: "arcade",
|
default: "arcade",
|
||||||
|
@ -51,8 +52,6 @@ cypressAsserter.gameStarted();
|
||||||
|
|
||||||
const game = new Phaser.Game(config);
|
const game = new Phaser.Game(config);
|
||||||
|
|
||||||
gameManager.init(game.scene);
|
|
||||||
|
|
||||||
window.addEventListener('resize', function (event) {
|
window.addEventListener('resize', function (event) {
|
||||||
const {width, height} = CoWebsiteManager.getGameSize();
|
const {width, height} = CoWebsiteManager.getGameSize();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue