From 30826c2101402b06d84c8d1179ae17762afbc1f2 Mon Sep 17 00:00:00 2001 From: Greenlamp Date: Mon, 6 May 2024 00:25:08 +0200 Subject: [PATCH] disable all key pressed when trying to open a modal --- src/inputs-controller.ts | 23 ++++++++++++++++++++--- src/ui/menu-ui-handler.ts | 5 +++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/inputs-controller.ts b/src/inputs-controller.ts index 3d09b768c1d..9196d5050c2 100644 --- a/src/inputs-controller.ts +++ b/src/inputs-controller.ts @@ -34,6 +34,7 @@ export class InputsController { private interactions: Map> = new Map(); private time: Time; private player: Map = new Map(); + public modalOpen: boolean = false; constructor(scene: Phaser.Scene) { this.scene = scene; @@ -79,9 +80,14 @@ export class InputsController { } update(): void { + if (this.modalOpen) { + this.modalOpen = false; + this.deactivatePressedKey(); + return; + } for (const b of Utils.getEnumValues(Button)) { if (!this.interactions.hasOwnProperty(b)) continue; - if (this.repeatInputDurationJustPassed(b)) { + if (this.repeatInputDurationJustPassed(b) && this.interactions[b].isPressed) { this.events.emit('input_down', { controller_type: 'repeated', button: b, @@ -166,8 +172,8 @@ export class InputsController { [Button.LEFT]: [keyCodes.LEFT, keyCodes.A], [Button.RIGHT]: [keyCodes.RIGHT, keyCodes.D], [Button.SUBMIT]: [keyCodes.ENTER], - [Button.ACTION]: [keyCodes.SPACE, this.scene.abSwapped ? keyCodes.X : keyCodes.Z], - [Button.CANCEL]: [keyCodes.BACKSPACE, this.scene.abSwapped ? keyCodes.Z : keyCodes.X], + [Button.ACTION]: [keyCodes.SPACE, keyCodes.Z], + [Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X], [Button.MENU]: [keyCodes.ESC, keyCodes.M], [Button.STATS]: [keyCodes.SHIFT, keyCodes.C], [Button.CYCLE_SHINY]: [keyCodes.R], @@ -248,11 +254,22 @@ export class InputsController { if (!this.interactions.hasOwnProperty(button)) return; this.buttonLock = button; this.interactions[button].pressTime = this.time.now; + this.interactions[button].isPressed = true; } delLastProcessedMovementTime(button: Button): void { if (!this.interactions.hasOwnProperty(button)) return; this.buttonLock = null; this.interactions[button].pressTime = null; + this.interactions[button].isPressed = false; + } + + deactivatePressedKey(): void { + this.buttonLock = null; + for (const b of Utils.getEnumValues(Button)) { + if (!this.interactions.hasOwnProperty(b)) return; + this.interactions[b].pressTime = null; + this.interactions[b].isPressed = false; + } } } \ No newline at end of file diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index bf032667610..1c9c098b19c 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -125,6 +125,7 @@ export default class MenuUiHandler extends MessageUiHandler { manageDataOptions.push({ label: i18next.t("menuUiHandler:importSession"), handler: () => { + this.scene.inputController.modalOpen = true; confirmSlot(i18next.t("menuUiHandler:importSlotSelect"), () => true, slotId => this.scene.gameData.importData(GameDataType.SESSION, slotId)); return true; }, @@ -155,6 +156,7 @@ export default class MenuUiHandler extends MessageUiHandler { manageDataOptions.push({ label: i18next.t("menuUiHandler:importData"), handler: () => { + this.scene.inputController.modalOpen = true; this.scene.gameData.importData(GameDataType.SYSTEM); return true; }, @@ -188,6 +190,7 @@ export default class MenuUiHandler extends MessageUiHandler { { label: 'Wiki', handler: () => { + this.scene.inputController.modalOpen = true; window.open(wikiUrl, '_blank').focus(); return true; }, @@ -196,6 +199,7 @@ export default class MenuUiHandler extends MessageUiHandler { { label: 'Discord', handler: () => { + this.scene.inputController.modalOpen = true; window.open(discordUrl, '_blank').focus(); return true; }, @@ -204,6 +208,7 @@ export default class MenuUiHandler extends MessageUiHandler { { label: 'GitHub', handler: () => { + this.scene.inputController.modalOpen = true; window.open(githubUrl, '_blank').focus(); return true; },