workadventure/front/src/Phaser/Login/LoginScene.ts

87 lines
3.0 KiB
TypeScript
Raw Normal View History

import {gameManager} from "../Game/GameManager";
2020-07-28 15:53:44 +02:00
import {SelectCharacterSceneName} from "./SelectCharacterScene";
2020-10-07 18:03:34 +02:00
import {ResizableScene} from "./ResizableScene";
import { localUserStore } from "../../Connexion/LocalUserStore";
2021-04-20 18:49:42 +02:00
import {MenuScene} from "../Menu/MenuScene";
import { isUserNameValid } from "../../Connexion/LocalUser";
export const LoginSceneName = "LoginScene";
2021-04-20 18:49:42 +02:00
const loginSceneKey = 'loginScene';
2020-10-07 18:03:34 +02:00
export class LoginScene extends ResizableScene {
2021-04-20 18:49:42 +02:00
private loginSceneElement!: Phaser.GameObjects.DOMElement;
2020-06-03 11:55:31 +02:00
private name: string = '';
constructor() {
super({
key: LoginSceneName
});
this.name = gameManager.getPlayerName() || '';
}
preload() {
2021-04-20 18:49:42 +02:00
this.load.html(loginSceneKey, 'resources/html/loginScene.html');
}
create() {
2021-05-05 17:07:03 +02:00
this.loginSceneElement = this.add.dom(-1000, 0).createFromCache(loginSceneKey);
this.centerXDomElement(this.loginSceneElement, 200);
2021-04-20 18:49:42 +02:00
MenuScene.revealMenusAfterInit(this.loginSceneElement, loginSceneKey);
2020-04-26 18:48:41 +02:00
2021-04-20 18:49:42 +02:00
const pErrorElement = this.loginSceneElement.getChildByID('errorLoginScene') as HTMLInputElement;
const inputElement = this.loginSceneElement.getChildByID('loginSceneName') as HTMLInputElement;
inputElement.value = localUserStore.getName() ?? '';
inputElement.focus();
inputElement.addEventListener('keypress', (event: KeyboardEvent) => {
if(inputElement.value.length > 7){
2021-04-20 18:49:42 +02:00
event.preventDefault();
return;
}
pErrorElement.innerHTML = '';
if(inputElement.value && !isUserNameValid(inputElement.value)){
2021-05-28 17:51:18 +02:00
pErrorElement.innerHTML = 'Invalid user name: No spaces are allowed.';
}
2021-04-20 18:49:42 +02:00
if (event.key === 'Enter') {
event.preventDefault();
this.login(inputElement);
return;
2020-05-01 23:48:30 +02:00
}
});
2021-04-20 18:49:42 +02:00
const continuingButton = this.loginSceneElement.getChildByID('loginSceneFormSubmit') as HTMLButtonElement;
continuingButton.addEventListener('click', (e) => {
e.preventDefault();
this.login(inputElement);
});
}
2021-04-20 18:49:42 +02:00
private login(inputElement: HTMLInputElement): void {
const pErrorElement = this.loginSceneElement.getChildByID('errorLoginScene') as HTMLInputElement;
this.name = inputElement.value;
if (this.name === '') {
pErrorElement.innerHTML = 'The name is empty';
return
}
if(!isUserNameValid(this.name)){
pErrorElement.innerHTML = 'Invalid user name: only letters and numbers are allowed. No spaces.';
return
}
if (this.name === '') return
2021-04-20 18:49:42 +02:00
gameManager.setPlayerName(this.name);
2020-07-28 15:53:44 +02:00
this.scene.stop(LoginSceneName)
gameManager.tryResumingGame(this, SelectCharacterSceneName);
this.scene.remove(LoginSceneName)
2020-05-04 01:48:14 +02:00
}
2020-10-07 18:03:34 +02:00
2021-04-20 18:49:42 +02:00
update(time: number, delta: number): void {
2020-10-07 18:03:34 +02:00
}
2021-05-05 17:07:03 +02:00
public onResize(ev: UIEvent): void {
this.centerXDomElement(this.loginSceneElement, 200);
2021-04-20 18:49:42 +02:00
}
}