|
@@ -3,6 +3,10 @@ import { GameDeckMode } from '../../common/utils/const/game-deck-mode-enum';
|
|
|
import { PhaserScene } from '../../common/utils/const/phaser-scene-enum';
|
|
|
import Phaser from 'phaser';
|
|
|
|
|
|
+import LoginDivPage from './menu-pages/login-div-page';
|
|
|
+import OnlineRoomDivPage from './menu-pages/online-room-div-page';
|
|
|
+import GameCreationDivPage from './menu-pages/game-creation-div-page';
|
|
|
+
|
|
|
export default class MainMenuScene extends Phaser.Scene {
|
|
|
|
|
|
constructor(menuEventListener) {
|
|
@@ -10,7 +14,7 @@ export default class MainMenuScene extends Phaser.Scene {
|
|
|
this.menuEventListener = menuEventListener;
|
|
|
|
|
|
this.username = '';
|
|
|
- this.previousMenu = null;
|
|
|
+ this.previousPages = new Array();
|
|
|
}
|
|
|
|
|
|
preload() {
|
|
@@ -19,150 +23,110 @@ export default class MainMenuScene extends Phaser.Scene {
|
|
|
this.load.html('main-menu', '../../assets/html/main-menu.html');
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ // create is call automatically by Phaser engine
|
|
|
create() {
|
|
|
console.log('create');
|
|
|
let background = this.add.image(0, 0, 'game-cover');
|
|
|
background.setOrigin(0, 0);
|
|
|
|
|
|
// Add main-menu HTML
|
|
|
- let element = this.add.dom(400, 100).createFromCache('main-menu');
|
|
|
-
|
|
|
- // Menu blocks
|
|
|
- let loginHtmlDiv = element.getChildByID('login');
|
|
|
- let onlineRoomHtmlDiv = element.getChildByID('online-room');
|
|
|
- let gameCreationHtmlDiv = element.getChildByID('game-creation');
|
|
|
-
|
|
|
- // Login block buttons
|
|
|
- let connectButton = element.getChildByName('loginButton');
|
|
|
- let username = element.getChildByName('username');
|
|
|
- let connectionStatus = element.getChildByID('connectionStatus');
|
|
|
- let onlineGame = element.getChildByName('onlineGame');
|
|
|
-
|
|
|
- // Online room buttons
|
|
|
- let createOnlineGameButton = element.getChildByName('createOnlineGame');
|
|
|
- let joinOnlineGameButton = element.getChildByName('joinOnlineGame');
|
|
|
- let backToMainButton = element.getChildByName('backToMain');
|
|
|
- let createdOnlineGamesList = element.getChildByID('list-games');
|
|
|
-
|
|
|
- // Game creation buttons
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- element.setPerspective(800);
|
|
|
-
|
|
|
- element.addListener('click');
|
|
|
-
|
|
|
- username.addEventListener("keyup", event => {
|
|
|
- if (connectButton.value === 'Connect') {
|
|
|
- if (event.key !== "Enter") return;
|
|
|
- connectButton.click();
|
|
|
- event.preventDefault();
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- console.log(connectButton);
|
|
|
- connectButton.focus();
|
|
|
- element.on('click', function (event) {
|
|
|
- console.log(event);
|
|
|
- let eventName = event.target.name;
|
|
|
- switch (eventName) {
|
|
|
- case "loginButton":
|
|
|
- if (connectButton.value === 'Connect') {
|
|
|
- if (username.value !== '') {
|
|
|
- connectButton.disabled = true;
|
|
|
- connectionStatus.innerText = 'Connecting...';
|
|
|
- username.disabled = true;
|
|
|
- console.log(username.value);
|
|
|
- console.log(' log :' + onlineGame.disabled);
|
|
|
- setTimeout(() => {
|
|
|
- connectionStatus.innerText = 'Connected as ' + username.value;
|
|
|
- this.username = username.value;
|
|
|
- onlineGame.disabled = false;
|
|
|
- connectButton.value = "Disconnect";
|
|
|
-
|
|
|
- connectButton.disabled = false;
|
|
|
- }, 1000);
|
|
|
- } else {
|
|
|
- connectionStatus.innerText = 'Not Connected : Enter Username';
|
|
|
- }
|
|
|
- } else {
|
|
|
- connectButton.disabled = true;
|
|
|
- connectionStatus.innerText = `Disconnecting ${this.username}...`;
|
|
|
- onlineGame.disabled = true;
|
|
|
- setTimeout(() => {
|
|
|
- connectionStatus.innerText = 'Not Connected';
|
|
|
- connectButton.value = "Connect";
|
|
|
- connectButton.disabled = false;
|
|
|
- username.value = '';
|
|
|
- this.username = username.value;
|
|
|
-
|
|
|
- username.disabled = false;
|
|
|
- }, 500);
|
|
|
- }
|
|
|
- break;
|
|
|
- case "onlineGame":
|
|
|
- loginHtmlDiv.style.display = 'none';
|
|
|
- onlineRoomHtmlDiv.style.display = 'block';
|
|
|
-
|
|
|
- break;
|
|
|
- case "backToMain":
|
|
|
- onlineRoomHtmlDiv.style.display = 'none';
|
|
|
- loginHtmlDiv.style.display = 'block';
|
|
|
-
|
|
|
- break;
|
|
|
- case "createOnlineGame":
|
|
|
- this.previousMenu = onlineRoomHtmlDiv;
|
|
|
- onlineRoomHtmlDiv.style.display = 'none';
|
|
|
- gameCreationHtmlDiv.style.display = 'block';
|
|
|
- break;
|
|
|
- case "backToPrev":
|
|
|
- this.previousMenu = null;
|
|
|
- gameCreationHtmlDiv.style.display = 'none';
|
|
|
- onlineRoomHtmlDiv.style.display = 'block';
|
|
|
- break;
|
|
|
- case "localGame":
|
|
|
- alert('Feature not implemented yet');
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- this.tweens.add({
|
|
|
- targets: element,
|
|
|
- y: 215,
|
|
|
- duration: 2300,
|
|
|
- ease: 'Power3'
|
|
|
- });
|
|
|
- //this.add.dom
|
|
|
+ let element = this.add.dom(250, 0).createFromCache('main-menu');
|
|
|
+ // Menu div pages
|
|
|
+ this.loginDivPage = new LoginDivPage(element,this.loginPageListener());
|
|
|
+ this.onlineRoomDivPage = new OnlineRoomDivPage(element, this.onlineRoomPageListener());
|
|
|
+ this.gameCreationDivPage = new GameCreationDivPage(element, this.gameCreationPageListener());
|
|
|
+
|
|
|
+ setTimeout(() => {
|
|
|
|
|
|
+ this.loginDivPage.show();
|
|
|
+ element.setPerspective(800);
|
|
|
+ this.tweens.add({
|
|
|
+ targets: element,
|
|
|
+ y: 190,
|
|
|
+ duration: 2300,
|
|
|
+ ease: 'Power3'
|
|
|
|
|
|
+ });
|
|
|
+
|
|
|
+ }, 1000);
|
|
|
|
|
|
// TODO : Display main menu
|
|
|
// Create new scenes : Local player room / Multi player room
|
|
|
// Pass to them the event listener
|
|
|
// On local player room, user can enter player names, selected color, game deck mode & rules
|
|
|
|
|
|
- // FOR TESTING
|
|
|
- //this.fakeNewPnpGameSelected();
|
|
|
}
|
|
|
|
|
|
update() {
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
+ // Listener for login page events
|
|
|
+ loginPageListener() {
|
|
|
+ return {
|
|
|
+ onRequestConnection: this.onRequestConnection.bind(this),
|
|
|
+ onRequestDisconnection: this.onRequestDisconnection.bind(this),
|
|
|
+ onGoOnlineRoom: this.onGoOnlineRoom.bind(this)
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
- fakeNewPnpGameSelected() {
|
|
|
- setTimeout(() => {
|
|
|
- let pBlueName = prompt("Player blue name : ");
|
|
|
- let pRedName = prompt("Player red name : ");
|
|
|
-
|
|
|
- //let gameDeckModeOptions = Object.values(GameDeckMode);
|
|
|
- //let gameDeckMode = Utils.promptSelectAmongOptions("Select Deck Mode", gameDeckModeOptions);
|
|
|
- let gameDeckMode = "factions";
|
|
|
- let advancedRules = [];
|
|
|
- console.log("Calling listener");
|
|
|
- this.menuEventListener.onNewPnpGame(pBlueName, pRedName, gameDeckMode, advancedRules);
|
|
|
- }, 1000);
|
|
|
+ // Listener for online room page events
|
|
|
+ onlineRoomPageListener() {
|
|
|
+ return {
|
|
|
+ onRequestOnlineGamesList: this.onRequestOnlineGamesList.bind(this),
|
|
|
+ onGoGameCreation: this.onGoGameCreation.bind(this),
|
|
|
+ onGoPreviousPage: this.onGoPreviousPage.bind(this)
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ // Listener for game creation page events
|
|
|
+ gameCreationPageListener() {
|
|
|
+ return {
|
|
|
+ onGoPreviousPage: this.onGoPreviousPage.bind(this)
|
|
|
+ };
|
|
|
}
|
|
|
+
|
|
|
+ // Callbacks implementation
|
|
|
+ onGoPreviousPage(fromPage) {
|
|
|
+ fromPage.hide();
|
|
|
+ this.previousPages.pop().show();
|
|
|
+ }
|
|
|
+
|
|
|
+ // Login page specific
|
|
|
+ onGoOnlineRoom() {
|
|
|
+
|
|
|
+ this.loginDivPage.hide();
|
|
|
+ this.previousPages.push(this.loginDivPage);
|
|
|
+ this.onlineRoomDivPage.setConnectionStatus(this.loginDivPage.getConnectionStatus());
|
|
|
+ this.onlineRoomDivPage.show();
|
|
|
+ }
|
|
|
+ onRequestConnection(username) {
|
|
|
+ this.username=username;
|
|
|
+ return this.menuEventListener.onTryConnect(username);
|
|
|
+ }
|
|
|
+ onRequestDisconnection() {
|
|
|
+ this.menuEventListener.onRequestDisconnection();
|
|
|
+ }
|
|
|
+
|
|
|
+ // Online room specific
|
|
|
+ onRequestOnlineGamesList() {
|
|
|
+ return this.menuEventListener.onOnlineGamesListRequested(this.username);
|
|
|
+ }
|
|
|
+
|
|
|
+ onGoGameCreation() {
|
|
|
+ this.onlineRoomDivPage.hide();
|
|
|
+ this.previousPages.push(this.onlineRoomDivPage);
|
|
|
+ this.gameCreationDivPage.show();
|
|
|
+ }
|
|
|
+
|
|
|
+ // Game cration specific
|
|
|
+ onGameCreated() {
|
|
|
+
|
|
|
+ // let gameDeckMode = "factions";
|
|
|
+ // let advancedRules = [];
|
|
|
+ // console.log("Calling listener");
|
|
|
+ // this.menuEventListener.onNewPnpGame(pBlueName, pRedName, gameDeckMode, advancedRules)
|
|
|
+ }
|
|
|
+
|
|
|
}
|