Tune DAS timing and enable tapping

This commit is contained in:
2026-03-24 21:39:52 -07:00
parent 3a307dbc80
commit 35a90e9c78
+39 -5
View File
@@ -11,9 +11,17 @@ const keyState = {
ArrowDown: false,
};
// Track key press timing for tap vs hold detection
let keyPressStartTime = null;
let wasAutoMoved = {
ArrowLeft: false,
ArrowRight: false,
ArrowDown: false,
};
let dasCounter = 0;
const DAS_DELAY = 100; // ms before auto-repeat starts
const ARR_SPEED = 30; // ms between auto-repeat moves
const DAS_DELAY = 75; // ms before auto-repeat starts (reduced from 100 for faster response)
const ARR_SPEED = 25; // ms between auto-repeat moves (reduced from 30 for faster movement)
// Initialize when DOM is ready
document.addEventListener('DOMContentLoaded', () => {
@@ -154,6 +162,8 @@ function setupKeyboardControls() {
// Track held keys for movement
if (keyState.hasOwnProperty(e.key)) {
keyState[e.key] = true;
keyPressStartTime = performance.now(); // Track when key was pressed
wasAutoMoved[e.key] = false; // Reset auto-move flag for tap detection
dasCounter = 0; // Reset DAS counter when key pressed
e.preventDefault();
return;
@@ -186,6 +196,21 @@ function setupKeyboardControls() {
if (keyState.hasOwnProperty(e.key)) {
keyState[e.key] = false;
dasCounter = 0;
// Tap detection: if key was held for less than DAS_DELAY and not auto-moved,
// send a single move for tap-based horizontal movement
if (keyPressStartTime) {
const pressDuration = performance.now() - keyPressStartTime;
if (pressDuration < DAS_DELAY && !wasAutoMoved[e.key]) {
// It was a tap - send single move
if (e.key === 'ArrowLeft') {
network.sendMove('left');
} else if (e.key === 'ArrowRight') {
network.sendMove('right');
}
}
}
keyPressStartTime = null;
}
});
@@ -290,9 +315,18 @@ function gameLoop(currentTime) {
if (dasCounter >= DAS_DELAY) {
const autoRepeatCounter = (dasCounter - DAS_DELAY) % ARR_SPEED;
if (autoRepeatCounter < (deltaTime || 0)) {
if (keyState.ArrowLeft) network.sendMove('left');
if (keyState.ArrowRight) network.sendMove('right');
if (keyState.ArrowDown) network.sendDrop();
if (keyState.ArrowLeft) {
network.sendMove('left');
wasAutoMoved.ArrowLeft = true; // Mark as auto-moved so keyup doesn't send another
}
if (keyState.ArrowRight) {
network.sendMove('right');
wasAutoMoved.ArrowRight = true;
}
if (keyState.ArrowDown) {
network.sendDrop();
wasAutoMoved.ArrowDown = true;
}
}
}
}