From da94d5264a66cf604f0e6fa9ceee21c1f7854f73 Mon Sep 17 00:00:00 2001 From: Dimava Date: Sat, 30 May 2020 10:54:53 +0300 Subject: [PATCH 1/8] replace MouseEvent.which with MouseEvent.button --- src/js/core/click_detector.js | 4 ++-- src/js/game/camera.js | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/js/core/click_detector.js b/src/js/core/click_detector.js index 557c1f28..1e332aa2 100644 --- a/src/js/core/click_detector.js +++ b/src/js/core/click_detector.js @@ -311,7 +311,7 @@ export class ClickDetector { const position = /** @type {typeof ClickDetector} */ (this.constructor).extractPointerPosition(event); if (event instanceof MouseEvent) { - const isRightClick = event.which == 3; + const isRightClick = event.button === 2; if (isRightClick) { // Ignore right clicks this.rightClick.dispatch(position, event); @@ -384,7 +384,7 @@ export class ClickDetector { } if (event instanceof MouseEvent) { - const isRightClick = event.which == 3; + const isRightClick = event.button === 2; if (isRightClick) { return; } diff --git a/src/js/game/camera.js b/src/js/game/camera.js index 930d6932..2e558216 100644 --- a/src/js/game/camera.js +++ b/src/js/game/camera.js @@ -436,11 +436,11 @@ export class Camera extends BasicSerializableObject { } this.touchPostMoveVelocity = new Vector(0, 0); - if (event.which === 1) { + if (event.button === 0) { this.combinedSingleTouchStartHandler(event.clientX, event.clientY); - } else if (event.which === 2) { + } else if (event.button === 1) { this.downPreHandler.dispatch(new Vector(event.clientX, event.clientY), enumMouseButton.middle); - } else if (event.which === 3) { + } else if (event.button === 2) { this.downPreHandler.dispatch(new Vector(event.clientX, event.clientY), enumMouseButton.right); } return false; @@ -460,7 +460,7 @@ export class Camera extends BasicSerializableObject { return; } - if (event.which === 1) { + if (event.button === 0) { this.combinedSingleTouchMoveHandler(event.clientX, event.clientY); } From e58c2fd3711d5ed9afee7381ac7721c76aa3218e Mon Sep 17 00:00:00 2001 From: Dimava Date: Sat, 30 May 2020 10:56:23 +0300 Subject: [PATCH 2/8] use MouseEvent in keyboard hooks --- src/js/core/input_distributor.js | 31 +++++++++++++++++-------------- src/js/game/camera.js | 5 +++++ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/js/core/input_distributor.js b/src/js/core/input_distributor.js index 4bd476b4..439b8dfe 100644 --- a/src/js/core/input_distributor.js +++ b/src/js/core/input_distributor.js @@ -182,25 +182,28 @@ export class InputDistributor { } /** - * @param {KeyboardEvent} event + * @param {KeyboardEvent | MouseEvent} event */ handleKeydown(event) { + const keyCode = event instanceof MouseEvent ? event.button : event.keyCode; if ( - event.keyCode === 9 || // TAB - event.keyCode === 16 || // SHIFT - event.keyCode === 17 || // CTRL - event.keyCode === 18 || // ALT - (event.keyCode >= 112 && event.keyCode < 122) // F1 - F10 + keyCode === 3 || + keyCode === 4 || // MB3 / MB4 + keyCode === 9 || // TAB + keyCode === 16 || // SHIFT + keyCode === 17 || // CTRL + keyCode === 18 || // ALT + (keyCode >= 112 && keyCode < 122) // F1 - F10 ) { event.preventDefault(); } - const isInitial = !this.keysDown.has(event.keyCode); - this.keysDown.add(event.keyCode); + const isInitial = !this.keysDown.has(keyCode); + this.keysDown.add(keyCode); if ( this.forwardToReceiver("keydown", { - keyCode: event.keyCode, + keyCode: keyCode, shift: event.shiftKey, alt: event.altKey, initial: isInitial, @@ -210,8 +213,7 @@ export class InputDistributor { return; } - const code = event.keyCode; - if (code === 27) { + if (keyCode === 27) { // Escape key event.preventDefault(); event.stopPropagation(); @@ -220,13 +222,14 @@ export class InputDistributor { } /** - * @param {KeyboardEvent} event + * @param {KeyboardEvent | MouseEvent} event */ handleKeyup(event) { - this.keysDown.delete(event.keyCode); + const keyCode = event instanceof MouseEvent ? event.button : event.keyCode; + this.keysDown.delete(keyCode); this.forwardToReceiver("keyup", { - keyCode: event.keyCode, + keyCode: keyCode, shift: event.shiftKey, alt: event.altKey, }); diff --git a/src/js/game/camera.js b/src/js/game/camera.js index 2e558216..21e7bbde 100644 --- a/src/js/game/camera.js +++ b/src/js/game/camera.js @@ -442,6 +442,8 @@ export class Camera extends BasicSerializableObject { this.downPreHandler.dispatch(new Vector(event.clientX, event.clientY), enumMouseButton.middle); } else if (event.button === 2) { this.downPreHandler.dispatch(new Vector(event.clientX, event.clientY), enumMouseButton.right); + } else { + this.root.app.inputMgr.handleKeydown(event); } return false; } @@ -484,6 +486,9 @@ export class Camera extends BasicSerializableObject { if (!this.checkPreventDoubleMouse()) { return; } + if (event.button >= 3) { + this.root.app.inputMgr.handleKeyup(event); + } this.combinedSingleTouchStopHandler(event.clientX, event.clientY); return false; From 79dcd79734848e25ed736183f638a54c012c59f0 Mon Sep 17 00:00:00 2001 From: Dimava Date: Sat, 30 May 2020 10:57:02 +0300 Subject: [PATCH 3/8] use MouseEvent in keybind change hooks --- src/js/game/key_action_mapper.js | 10 ++++++++++ src/js/states/keybindings.js | 17 ++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/js/game/key_action_mapper.js b/src/js/game/key_action_mapper.js index 60690934..bd49d29e 100644 --- a/src/js/game/key_action_mapper.js +++ b/src/js/game/key_action_mapper.js @@ -86,6 +86,16 @@ for (const categoryId in KEYMAPPINGS) { */ export function getStringForKeyCode(code) { switch (code) { + case 0: + return "LMB"; + case 1: + return "MMB"; + case 2: + return "RMB"; + case 3: + return "MB4"; + case 4: + return "MB5"; case 8: return "⌫"; case 9: diff --git a/src/js/states/keybindings.js b/src/js/states/keybindings.js index 0f7fcf9e..f4aad427 100644 --- a/src/js/states/keybindings.js +++ b/src/js/states/keybindings.js @@ -121,9 +121,24 @@ export class KeybindingsState extends TextualGameState { this.updateKeybindings(); }); - dialog.inputReciever.backButton.add(() => {}); + const clickListener = event => { + console.log(event); + if (event.target.tagName == "BUTTON") { + return; + } + event.preventDefault(); + const keyCode = event.button; + this.app.settings.updateKeybindingOverride(id, keyCode); + + this.dialogs.closeDialog(dialog); + this.updateKeybindings(); + }; + + dialog.inputReciever.backButton.add(() => {}); this.dialogs.internalShowDialog(dialog); + dialog.element.onmousedown = clickListener; + this.app.sound.playUiSound(SOUNDS.dialogOk); } From d5d615bfd3d7955cc6ac7bf885182ae417680de6 Mon Sep 17 00:00:00 2001 From: Dimava Date: Sat, 30 May 2020 11:11:26 +0300 Subject: [PATCH 4/8] change MouseEvent keyCode to event.button + 1 --- src/js/core/input_distributor.js | 8 ++++---- src/js/game/key_action_mapper.js | 10 +++++----- src/js/states/keybindings.js | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/js/core/input_distributor.js b/src/js/core/input_distributor.js index 439b8dfe..e46a3076 100644 --- a/src/js/core/input_distributor.js +++ b/src/js/core/input_distributor.js @@ -185,10 +185,10 @@ export class InputDistributor { * @param {KeyboardEvent | MouseEvent} event */ handleKeydown(event) { - const keyCode = event instanceof MouseEvent ? event.button : event.keyCode; + const keyCode = event instanceof MouseEvent ? event.button + 1 : event.keyCode; if ( - keyCode === 3 || - keyCode === 4 || // MB3 / MB4 + keyCode === 4 || // MB4 + keyCode === 5 || // MB5 keyCode === 9 || // TAB keyCode === 16 || // SHIFT keyCode === 17 || // CTRL @@ -225,7 +225,7 @@ export class InputDistributor { * @param {KeyboardEvent | MouseEvent} event */ handleKeyup(event) { - const keyCode = event instanceof MouseEvent ? event.button : event.keyCode; + const keyCode = event instanceof MouseEvent ? event.button + 1 : event.keyCode; this.keysDown.delete(keyCode); this.forwardToReceiver("keyup", { diff --git a/src/js/game/key_action_mapper.js b/src/js/game/key_action_mapper.js index bd49d29e..69511362 100644 --- a/src/js/game/key_action_mapper.js +++ b/src/js/game/key_action_mapper.js @@ -86,15 +86,15 @@ for (const categoryId in KEYMAPPINGS) { */ export function getStringForKeyCode(code) { switch (code) { - case 0: - return "LMB"; case 1: - return "MMB"; + return "LMB"; case 2: - return "RMB"; + return "MMB"; case 3: - return "MB4"; + return "RMB"; case 4: + return "MB4"; + case 5: return "MB5"; case 8: return "⌫"; diff --git a/src/js/states/keybindings.js b/src/js/states/keybindings.js index f4aad427..28bb05d5 100644 --- a/src/js/states/keybindings.js +++ b/src/js/states/keybindings.js @@ -127,7 +127,7 @@ export class KeybindingsState extends TextualGameState { return; } event.preventDefault(); - const keyCode = event.button; + const keyCode = event.button + 1; this.app.settings.updateKeybindingOverride(id, keyCode); From fe33f51424ad11bcb6e84283d748a5072266a7f8 Mon Sep 17 00:00:00 2001 From: Dimava Date: Sat, 30 May 2020 11:11:56 +0300 Subject: [PATCH 5/8] always use MouseEvent in keyboard hooks --- src/js/game/camera.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/js/game/camera.js b/src/js/game/camera.js index 21e7bbde..da2ab3f0 100644 --- a/src/js/game/camera.js +++ b/src/js/game/camera.js @@ -442,9 +442,8 @@ export class Camera extends BasicSerializableObject { this.downPreHandler.dispatch(new Vector(event.clientX, event.clientY), enumMouseButton.middle); } else if (event.button === 2) { this.downPreHandler.dispatch(new Vector(event.clientX, event.clientY), enumMouseButton.right); - } else { - this.root.app.inputMgr.handleKeydown(event); } + this.root.app.inputMgr.handleKeydown(event); return false; } @@ -486,9 +485,7 @@ export class Camera extends BasicSerializableObject { if (!this.checkPreventDoubleMouse()) { return; } - if (event.button >= 3) { - this.root.app.inputMgr.handleKeyup(event); - } + this.root.app.inputMgr.handleKeyup(event); this.combinedSingleTouchStopHandler(event.clientX, event.clientY); return false; From 0d342ee4172244143b44b6a97be32d7cdb47fcff Mon Sep 17 00:00:00 2001 From: Dimava Date: Mon, 1 Jun 2020 02:36:41 +0300 Subject: [PATCH 6/8] move KeyMouse listeners to correct location --- src/js/core/input_distributor.js | 13 +++++++++---- src/js/game/camera.js | 2 -- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/js/core/input_distributor.js b/src/js/core/input_distributor.js index e46a3076..03ad8e0c 100644 --- a/src/js/core/input_distributor.js +++ b/src/js/core/input_distributor.js @@ -141,8 +141,13 @@ export class InputDistributor { bindToEvents() { window.addEventListener("popstate", this.handleBackButton.bind(this), false); document.addEventListener("backbutton", this.handleBackButton.bind(this), false); - window.addEventListener("keydown", this.handleKeydown.bind(this)); - window.addEventListener("keyup", this.handleKeyup.bind(this)); + + window.addEventListener("keydown", this.handleKeyMouseDown.bind(this)); + window.addEventListener("keyup", this.handleKeyMouseUp.bind(this)); + + window.addEventListener("mousedown", this.handleKeyMouseDown.bind(this)); + window.addEventListener("mouseup", this.handleKeyMouseUp.bind(this)); + window.addEventListener("blur", this.handleBlur.bind(this)); } @@ -184,7 +189,7 @@ export class InputDistributor { /** * @param {KeyboardEvent | MouseEvent} event */ - handleKeydown(event) { + handleKeyMouseDown(event) { const keyCode = event instanceof MouseEvent ? event.button + 1 : event.keyCode; if ( keyCode === 4 || // MB4 @@ -224,7 +229,7 @@ export class InputDistributor { /** * @param {KeyboardEvent | MouseEvent} event */ - handleKeyup(event) { + handleKeyMouseUp(event) { const keyCode = event instanceof MouseEvent ? event.button + 1 : event.keyCode; this.keysDown.delete(keyCode); diff --git a/src/js/game/camera.js b/src/js/game/camera.js index da2ab3f0..2e558216 100644 --- a/src/js/game/camera.js +++ b/src/js/game/camera.js @@ -443,7 +443,6 @@ export class Camera extends BasicSerializableObject { } else if (event.button === 2) { this.downPreHandler.dispatch(new Vector(event.clientX, event.clientY), enumMouseButton.right); } - this.root.app.inputMgr.handleKeydown(event); return false; } @@ -485,7 +484,6 @@ export class Camera extends BasicSerializableObject { if (!this.checkPreventDoubleMouse()) { return; } - this.root.app.inputMgr.handleKeyup(event); this.combinedSingleTouchStopHandler(event.clientX, event.clientY); return false; From 54e11e6baf9a4f804e4f729d02a413ff8c26ff21 Mon Sep 17 00:00:00 2001 From: Dimava Date: Mon, 1 Jun 2020 02:55:54 +0300 Subject: [PATCH 7/8] change onclick to addEventListener --- src/js/states/keybindings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/states/keybindings.js b/src/js/states/keybindings.js index 28bb05d5..91f38b23 100644 --- a/src/js/states/keybindings.js +++ b/src/js/states/keybindings.js @@ -137,7 +137,7 @@ export class KeybindingsState extends TextualGameState { dialog.inputReciever.backButton.add(() => {}); this.dialogs.internalShowDialog(dialog); - dialog.element.onmousedown = clickListener; + dialog.element.addEventListener("mousedown", clickListener); this.app.sound.playUiSound(SOUNDS.dialogOk); } From e900d01026a9da9adae99f58f29eee06036af981 Mon Sep 17 00:00:00 2001 From: Dimava Date: Mon, 1 Jun 2020 02:58:01 +0300 Subject: [PATCH 8/8] remove console.log --- src/js/states/keybindings.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/js/states/keybindings.js b/src/js/states/keybindings.js index 91f38b23..f9b25359 100644 --- a/src/js/states/keybindings.js +++ b/src/js/states/keybindings.js @@ -122,7 +122,6 @@ export class KeybindingsState extends TextualGameState { }); const clickListener = event => { - console.log(event); if (event.target.tagName == "BUTTON") { return; }