handle many button presses and fix to use targetTouches

This commit is contained in:
Corwin 2024-04-06 02:12:39 +01:00
parent 3a1f1691f9
commit b9a67e6b0f
No known key found for this signature in database

View file

@ -270,11 +270,11 @@
}; };
mobileDpad.addEventListener("touchstart", (evt) => mobileDpad.addEventListener("touchstart", (evt) =>
dpadMovement(evt.touches[0]) dpadMovement(evt.targetTouches[0])
); );
mobileDpad.addEventListener("touchmove", (evt) => mobileDpad.addEventListener("touchmove", (evt) =>
dpadMovement(evt.touches[0]) dpadMovement(evt.targetTouches[0])
); );
mobileDpad.addEventListener("touchend", (evt) => { mobileDpad.addEventListener("touchend", (evt) => {
@ -284,8 +284,10 @@
previouslyPressedButtons = []; previouslyPressedButtons = [];
}); });
let mobileAbAPress = undefined; let mobileAbAPress = new Set();
const mobileAbMovement = (touch) => { const mobileAbMovement = (touches) => {
const currentTouches = new Set();
for (let touch of touches) {
const target = touch.target.getBoundingClientRect(); const target = touch.target.getBoundingClientRect();
const touchPoint = { x: touch.clientX, y: touch.clientY }; const touchPoint = { x: touch.clientX, y: touch.clientY };
@ -302,39 +304,39 @@
}; };
const aPress = relativePosition.x > relativePosition.y; const aPress = relativePosition.x > relativePosition.y;
currentTouches.add(aPress ? "A" : "B");
if (aPress !== mobileAbAPress) {
if (mobileAbAPress === true) {
releaseButton("A");
} else if (mobileAbAPress === false) {
releaseButton("B");
}
}
if (aPress) {
pressButton("A");
} else {
pressButton("B");
} }
mobileAbAPress = aPress; for (let oldTouch of mobileAbAPress) {
if (!currentTouches.has(oldTouch)) {
console.log("Release", oldTouch);
releaseButton(oldTouch);
}
}
for (let newTouch of currentTouches) {
if (!mobileAbAPress.has(newTouch)) {
console.log("Press", newTouch);
pressButton(newTouch);
}
}
mobileAbAPress = currentTouches;
}; };
mobileAb.addEventListener("touchstart", (evt) => mobileAb.addEventListener("touchstart", (evt) => {
mobileAbMovement(evt.touches[0]) mobileAbMovement(evt.targetTouches);
); });
mobileAb.addEventListener("touchmove", (evt) => mobileAb.addEventListener("touchmove", (evt) => {
mobileAbMovement(evt.touches[0]) mobileAbMovement(evt.targetTouches);
); });
mobileAb.addEventListener("touchend", (evt) => { mobileAb.addEventListener("touchend", (evt) => {
if (mobileAbAPress === true) { mobileAbMovement(evt.targetTouches);
releaseButton("A"); });
} else if (mobileAbAPress === false) {
releaseButton("B");
}
mobileAbAPress = undefined; mobileAb.addEventListener("touchcancel", (evt) => {
mobileAbMovement(evt.targetTouches);
}); });
</script> </script>
</body> </body>