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" src="/src/game-entry.js"></script>
|
||||||
<script type="module">
|
<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 dispatchKey = (type, key, code, keyCode) => {
|
||||||
const event = new KeyboardEvent(type, {
|
const event = new KeyboardEvent(type, {
|
||||||
key,
|
key,
|
||||||
@ -156,22 +149,11 @@
|
|||||||
window.dispatchEvent(event);
|
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) => {
|
const emitHelmVector = (x, y) => {
|
||||||
window.dispatchEvent(new CustomEvent('airship:helm-vector', { detail: { x, y } }));
|
window.dispatchEvent(new CustomEvent('airship:helm-vector', { detail: { x, y } }));
|
||||||
};
|
};
|
||||||
|
|
||||||
const releaseStick = () => {
|
const releaseStick = () => {
|
||||||
for (const code of [...held]) setHeld(code, false);
|
|
||||||
document.querySelector('#drag-thumb').style.transform = 'translate(0px, 0px)';
|
document.querySelector('#drag-thumb').style.transform = 'translate(0px, 0px)';
|
||||||
emitHelmVector(0, 0);
|
emitHelmVector(0, 0);
|
||||||
};
|
};
|
||||||
@ -179,7 +161,6 @@
|
|||||||
const stick = document.querySelector('#drag-stick');
|
const stick = document.querySelector('#drag-stick');
|
||||||
const thumb = document.querySelector('#drag-thumb');
|
const thumb = document.querySelector('#drag-thumb');
|
||||||
const radius = 45;
|
const radius = 45;
|
||||||
const deadZone = 12;
|
|
||||||
let stickPointer = null;
|
let stickPointer = null;
|
||||||
|
|
||||||
const updateStick = (event) => {
|
const updateStick = (event) => {
|
||||||
@ -194,10 +175,6 @@
|
|||||||
|
|
||||||
thumb.style.transform = `translate(${dx}px, ${dy}px)`;
|
thumb.style.transform = `translate(${dx}px, ${dy}px)`;
|
||||||
emitHelmVector(dx / radius, dy / radius);
|
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) => {
|
stick.addEventListener('pointerdown', (event) => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user