From 2149d9dbe3c452019d50e14fbd8542cc713ef551 Mon Sep 17 00:00:00 2001 From: JonathanMM Date: Fri, 4 Mar 2022 18:47:35 +0100 Subject: [PATCH] =?UTF-8?q?Fix=20#51=20:=20Blocage=20du=20clavier=20en=20f?= =?UTF-8?q?in=20de=20partie=20m=C3=AAme=20si=20on=20ferme=20le=20panel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ts/gestionnaire.ts | 8 ++++---- ts/input.ts | 27 ++++++++++++++++++--------- ts/panelManager.ts | 6 +++--- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/ts/gestionnaire.ts b/ts/gestionnaire.ts index 51c00af..5e79849 100644 --- a/ts/gestionnaire.ts +++ b/ts/gestionnaire.ts @@ -1,6 +1,6 @@ import Dictionnaire from "./dictionnaire"; import Grille from "./grille"; -import Input from "./input"; +import Input, { ContexteBloquage } from "./input"; import LettreResultat from "./entites/lettreResultat"; import { LettreStatut } from "./entites/lettreStatut"; import FinDePartiePanel from "./finDePartiePanel"; @@ -194,15 +194,15 @@ export default class Gestionnaire { } if (this._grille) { - if (this._input) this._input.bloquer(); + if (this._input) this._input.bloquer(ContexteBloquage.ValidationMot); this._grille.validerMot(mot, resultats, isBonneReponse, chargementPartie, () => { if (this._input) { this._input.updateClavier(resultats); if (isBonneReponse || this._propositions.length === this._maxNbPropositions) { - this._input.bloquer(); + this._input.bloquer(ContexteBloquage.ValidationMot); this._finDePartiePanel.afficher(); } else { - this._input.debloquer(); + this._input.debloquer(ContexteBloquage.ValidationMot); } } }); diff --git a/ts/input.ts b/ts/input.ts index 2a48b42..905774b 100644 --- a/ts/input.ts +++ b/ts/input.ts @@ -5,6 +5,11 @@ import { ClavierDisposition } from "./entites/clavierDisposition"; import Configuration from "./entites/configuration"; import Dictionnaire from "./dictionnaire"; +export enum ContexteBloquage { + ValidationMot, + Panel, +} + export default class Input { private readonly _grille: HTMLElement; private readonly _inputArea: HTMLElement; @@ -13,7 +18,7 @@ export default class Input { private _longueurMot: number; private _motSaisi: string; - private _estBloque: boolean; + private _estBloque: Array; // TODO : Faire un dictionnaire pour savoir qui bloque, pour que si c'est bloqué par finDePartie, et que la fermeture de panel essaye de débloquer, ça ne fasse rien private _resultats: Array>; public constructor(gestionnaire: Gestionnaire, configuration: Configuration, longueurMot: number, premiereLettre: string) { @@ -23,7 +28,7 @@ export default class Input { this._longueurMot = longueurMot; this._gestionnaire = gestionnaire; this._motSaisi = ""; - this._estBloque = false; + this._estBloque = new Array(); this._resultats = new Array>(); this.ajouterEvenementClavierPhysique(); @@ -151,7 +156,7 @@ export default class Input { } private effacerLettre(): void { - if (this._estBloque) return; + if (this.estBloque()) return; if (this._motSaisi.length !== 0) { this._motSaisi = this._motSaisi.substring(0, this._motSaisi.length - 1); } @@ -159,26 +164,30 @@ export default class Input { } private async validerMot(): Promise { - if (this._estBloque) return; + if (this.estBloque()) return; let mot = this._motSaisi; let isMotValide = await this._gestionnaire.verifierMot(mot); if (isMotValide) this._motSaisi = ""; } private saisirLettre(lettre: string): void { - if (this._estBloque) return; + if (this.estBloque()) return; if (this._motSaisi.length >= this._longueurMot) return; if (this._motSaisi.length === 0 && lettre.toUpperCase() !== this._premiereLettre) this._motSaisi += this._premiereLettre; this._motSaisi += lettre; this._gestionnaire.actualiserAffichage(this._motSaisi); } - public bloquer(): void { - this._estBloque = true; + public bloquer(contexte: ContexteBloquage): void { + if (!this._estBloque.includes(contexte)) this._estBloque.push(contexte); } - public debloquer(): void { - this._estBloque = false; + public debloquer(contexte: ContexteBloquage): void { + if (this._estBloque.includes(contexte)) this._estBloque.splice(this._estBloque.indexOf(contexte), 1); + } + + private estBloque(): boolean { + return this._estBloque.length > 0; } public updateClavier(resultats: Array): void { diff --git a/ts/panelManager.ts b/ts/panelManager.ts index 3150a95..58d114e 100644 --- a/ts/panelManager.ts +++ b/ts/panelManager.ts @@ -1,4 +1,4 @@ -import Input from "./input"; +import Input, { ContexteBloquage } from "./input"; export default class PanelManager { private readonly _panelArea: HTMLElement; @@ -46,12 +46,12 @@ export default class PanelManager { public afficherPanel(): void { this._panelArea.style.display = "block"; - if (this._input) this._input.bloquer(); + if (this._input) this._input.bloquer(ContexteBloquage.Panel); } public cacherPanel(): void { this._panelArea.style.display = "none"; - if (this._input) this._input.debloquer(); + if (this._input) this._input.debloquer(ContexteBloquage.Panel); } public setContenu(titre: string, contenu: string): void {