88 lines
3.1 KiB
TypeScript
88 lines
3.1 KiB
TypeScript
import {gameManager} from "../Game/GameManager";
|
|
import {SelectCharacterSceneName} from "./SelectCharacterScene";
|
|
import {ResizableScene} from "./ResizableScene";
|
|
import { localUserStore } from "../../Connexion/LocalUserStore";
|
|
import {MenuScene} from "../Menu/MenuScene";
|
|
import { isUserNameValid } from "../../Connexion/LocalUser";
|
|
import { MAX_USERNAME_LENGTH } from "../../Enum/EnvironmentVariable";
|
|
|
|
export const LoginSceneName = "LoginScene";
|
|
|
|
const loginSceneKey = 'loginScene';
|
|
|
|
export class LoginScene extends ResizableScene {
|
|
|
|
private loginSceneElement!: Phaser.GameObjects.DOMElement;
|
|
private name: string = '';
|
|
|
|
constructor() {
|
|
super({
|
|
key: LoginSceneName
|
|
});
|
|
this.name = gameManager.getPlayerName() || '';
|
|
}
|
|
|
|
preload() {
|
|
this.load.html(loginSceneKey, 'resources/html/loginScene.html');
|
|
}
|
|
|
|
create() {
|
|
this.loginSceneElement = this.add.dom(-1000, 0).createFromCache(loginSceneKey);
|
|
this.centerXDomElement(this.loginSceneElement, 200);
|
|
MenuScene.revealMenusAfterInit(this.loginSceneElement, loginSceneKey);
|
|
|
|
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 >= MAX_USERNAME_LENGTH){
|
|
event.preventDefault();
|
|
return;
|
|
}
|
|
pErrorElement.innerHTML = '';
|
|
if(inputElement.value && !isUserNameValid(inputElement.value)){
|
|
pErrorElement.innerHTML = 'Invalid user name: No spaces are allowed.';
|
|
}
|
|
if (event.key === 'Enter') {
|
|
event.preventDefault();
|
|
this.login(inputElement);
|
|
return;
|
|
}
|
|
});
|
|
|
|
const continuingButton = this.loginSceneElement.getChildByID('loginSceneFormSubmit') as HTMLButtonElement;
|
|
continuingButton.addEventListener('click', (e) => {
|
|
e.preventDefault();
|
|
this.login(inputElement);
|
|
});
|
|
}
|
|
|
|
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
|
|
gameManager.setPlayerName(this.name);
|
|
|
|
this.scene.stop(LoginSceneName)
|
|
gameManager.tryResumingGame(this, SelectCharacterSceneName);
|
|
this.scene.remove(LoginSceneName)
|
|
}
|
|
|
|
update(time: number, delta: number): void {
|
|
|
|
}
|
|
|
|
public onResize(ev: UIEvent): void {
|
|
this.centerXDomElement(this.loginSceneElement, 200);
|
|
}
|
|
}
|