diff --git a/website/site/index.html b/website/site/index.html index b974c3a2..82ed6be7 100644 --- a/website/site/index.html +++ b/website/site/index.html @@ -222,46 +222,53 @@ addSimpleButton(mobileStart, "Start"); addSimpleButton(mobileSelect, "Select"); - let previouslyPressedButtons = []; + let previouslyPressedButtons = new Set(); const dpadMovement = (touch) => { - const target = touch.target.getBoundingClientRect(); + const currentlyPressed = new Set(); + for (let touch of touches) { + const target = touch.target.getBoundingClientRect(); - const touchPoint = { x: touch.clientX, y: touch.clientY }; - const targetArea = { - x: target.left, - y: target.top, - width: target.width, - height: target.height, - }; + const touchPoint = { x: touch.clientX, y: touch.clientY }; + const targetArea = { + x: target.left, + y: target.top, + width: target.width, + height: target.height, + }; - const relativePosition = { - x: touchPoint.x - targetArea.x, - y: touchPoint.y - targetArea.y, - }; + const relativePosition = { + x: touchPoint.x - targetArea.x, + y: touchPoint.y - targetArea.y, + }; - const touchedBox = { - x: Math.floor(relativePosition.x / (targetArea.width / 3)), - y: Math.floor(relativePosition.y / (targetArea.height / 3)), - }; + const touchedBox = { + x: Math.floor(relativePosition.x / (targetArea.width / 3)), + y: Math.floor(relativePosition.y / (targetArea.height / 3)), + }; - const buttonBoxMapping = [ - [["Up", "Left"], ["Up"], ["Up", "Right"]], - [["Left"], [], ["Right"]], - [["Down", "Left"], ["Down"], ["Down", "Right"]], - ]; + const buttonBoxMapping = [ + [["Up", "Left"], ["Up"], ["Up", "Right"]], + [["Left"], [], ["Right"]], + [["Down", "Left"], ["Down"], ["Down", "Right"]], + ]; - const buttonsToPress = - (buttonBoxMapping[touchedBox.y] ?? [])[touchedBox.x] ?? []; + const buttonsToPress = + (buttonBoxMapping[touchedBox.y] ?? [])[touchedBox.x] ?? []; + + for (let button of buttonsToPress) { + currentlyPressed.add(button); + } + } for (let oldButton of previouslyPressedButtons) { - if (!buttonsToPress.includes(oldButton)) { + if (!buttonsToPress.has(oldButton)) { releaseButton(oldButton); } } for (let newButton of buttonsToPress) { - if (!previouslyPressedButtons.includes(newButton)) { + if (!previouslyPressedButtons.has(newButton)) { pressButton(newButton); } } @@ -270,18 +277,19 @@ }; mobileDpad.addEventListener("touchstart", (evt) => - dpadMovement(evt.targetTouches[0]) + dpadMovement(evt.targetTouches) ); mobileDpad.addEventListener("touchmove", (evt) => - dpadMovement(evt.targetTouches[0]) + dpadMovement(evt.targetTouches) ); mobileDpad.addEventListener("touchend", (evt) => { - for (let oldButton of previouslyPressedButtons) { - releaseButton(oldButton); - } - previouslyPressedButtons = []; + dpadMovement(evt.targetTouches); + }); + + mobileDpad.addEventListener("touchcancel", (evt) => { + dpadMovement(evt.targetTouches); }); let mobileAbAPress = new Set();