Keep mobile helm input fully analog

This commit is contained in:
Admin 2026-09-18 05:46:06 +00:00
parent f07c8117a6
commit 6e7f0b28a4

View File

@ -137,13 +137,6 @@
<script type="module" src="/src/game-entry.js"></script>
<script type="module">
const keyMap = {
ArrowLeft: { key: 'ArrowLeft', code: 'ArrowLeft', keyCode: 37 },
ArrowUp: { key: 'ArrowUp', code: 'ArrowUp', keyCode: 38 },
ArrowRight: { key: 'ArrowRight', code: 'ArrowRight', keyCode: 39 },
ArrowDown: { key: 'ArrowDown', code: 'ArrowDown', keyCode: 40 },
};
const dispatchKey = (type, key, code, keyCode) => {
const event = new KeyboardEvent(type, {
key,
@ -156,22 +149,11 @@
window.dispatchEvent(event);
};
const held = new Set();
const setHeld = (code, isDown) => {
if (isDown === held.has(code)) return;
const meta = keyMap[code];
if (!meta) return;
dispatchKey(isDown ? 'keydown' : 'keyup', meta.key, meta.code, meta.keyCode);
if (isDown) held.add(code);
else held.delete(code);
};
const emitHelmVector = (x, y) => {
window.dispatchEvent(new CustomEvent('airship:helm-vector', { detail: { x, y } }));
};
const releaseStick = () => {
for (const code of [...held]) setHeld(code, false);
document.querySelector('#drag-thumb').style.transform = 'translate(0px, 0px)';
emitHelmVector(0, 0);
};
@ -179,7 +161,6 @@
const stick = document.querySelector('#drag-stick');
const thumb = document.querySelector('#drag-thumb');
const radius = 45;
const deadZone = 12;
let stickPointer = null;
const updateStick = (event) => {
@ -194,10 +175,6 @@
thumb.style.transform = `translate(${dx}px, ${dy}px)`;
emitHelmVector(dx / radius, dy / radius);
setHeld('ArrowLeft', dx < -deadZone);
setHeld('ArrowRight', dx > deadZone);
setHeld('ArrowUp', dy < -deadZone);
setHeld('ArrowDown', dy > deadZone);
};
stick.addEventListener('pointerdown', (event) => {