Keep mobile helm input fully analog
This commit is contained in:
parent
f07c8117a6
commit
6e7f0b28a4
23
index.html
23
index.html
@ -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) => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user