mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-12-18 15:55:20 +01:00
[Bug] Make touch events prevent pointer events (#6528)
This commit is contained in:
parent
ff6de568af
commit
d9d6163b07
@ -5,9 +5,9 @@ import type Phaser from "phaser";
|
|||||||
const repeatInputDelayMillis = 250;
|
const repeatInputDelayMillis = 250;
|
||||||
|
|
||||||
export class TouchControl {
|
export class TouchControl {
|
||||||
events: Phaser.Events.EventEmitter;
|
readonly events: Phaser.Events.EventEmitter;
|
||||||
private buttonLock: string[] = [];
|
private buttonLock: string[] = [];
|
||||||
private inputInterval: NodeJS.Timeout[] = [];
|
private readonly inputInterval: NodeJS.Timeout[] = [];
|
||||||
/** Whether touch controls are disabled */
|
/** Whether touch controls are disabled */
|
||||||
private disabled = false;
|
private disabled = false;
|
||||||
/** Whether the last touch event has finished before disabling */
|
/** Whether the last touch event has finished before disabling */
|
||||||
@ -61,12 +61,46 @@ export class TouchControl {
|
|||||||
* event, removes the keydown state, and removes the 'active' class from the node and the last touched element.
|
* event, removes the keydown state, and removes the 'active' class from the node and the last touched element.
|
||||||
*/
|
*/
|
||||||
bindKey(node: HTMLElement, key: string) {
|
bindKey(node: HTMLElement, key: string) {
|
||||||
|
node.addEventListener("touchstart", (event: TouchEvent) => {
|
||||||
|
// Handle touch events for touch devices
|
||||||
|
this.touchButtonDown(node, key);
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
// prevent pointer event from also firing (undefined just sets presence of custom attribute)
|
||||||
|
if (event.currentTarget instanceof HTMLElement) {
|
||||||
|
event.currentTarget.dataset.skipPointerEvent = undefined;
|
||||||
|
}
|
||||||
|
});
|
||||||
node.addEventListener("pointerdown", event => {
|
node.addEventListener("pointerdown", event => {
|
||||||
|
const currentTarget = event.currentTarget;
|
||||||
|
if (currentTarget instanceof HTMLElement && "skipPointerDown" in currentTarget.dataset) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
this.touchButtonDown(node, key);
|
this.touchButtonDown(node, key);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
node.addEventListener("touchcancel", (event: TouchEvent) => {
|
||||||
|
if (event.currentTarget instanceof HTMLElement && "skipPointerDown" in event.currentTarget.dataset) {
|
||||||
|
delete event.currentTarget.dataset.skipPointerEvent;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
node.addEventListener("touchend", (event: TouchEvent) => {
|
||||||
|
event.preventDefault();
|
||||||
|
this.touchButtonUp(node, key, event.target?.["id"]);
|
||||||
|
if (event.currentTarget instanceof HTMLElement && "skipPointerDown" in event.currentTarget.dataset) {
|
||||||
|
// allow pointer event to once again fire
|
||||||
|
delete event.currentTarget.dataset.skipPointerEvent;
|
||||||
|
event.currentTarget.dataset.skipPointerUp = undefined;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
node.addEventListener("pointerup", event => {
|
node.addEventListener("pointerup", event => {
|
||||||
|
if (event.currentTarget instanceof HTMLElement && "skipPointerUp" in event.currentTarget.dataset) {
|
||||||
|
delete event.currentTarget.dataset.skipPointerUp;
|
||||||
|
return;
|
||||||
|
}
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
this.touchButtonUp(node, key, event.target?.["id"]);
|
this.touchButtonUp(node, key, event.target?.["id"]);
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user