trueLMAO/frontend-minimal/static/gamepad.js
2023-02-18 16:32:26 +00:00

38 lines
1,008 B
JavaScript

const controls = new Set([]);
window.addEventListener('blur', () => { controls.clear(); });
window.addEventListener('focus', () => { controls.clear(); });
const keymap = {};
[
[1 << 7, ['Enter', 'Shift']], // start
[1 << 6, ['z', 'Z', ',', '<']], // A
[1 << 5, ['c', 'C', '/', '?']], // C
[1 << 4, ['x', 'X', '.', '>', ' ']], // B
[1 << 3, ['ArrowRight', 'd', 'D']], // R
[1 << 2, ['ArrowLeft', 'a', 'A']], // L
[1 << 1, ['ArrowDown', 's', 'S']], // D
[1, ['ArrowUp', 'w', 'W']], // U
].forEach(([value, keys]) => {
keys.forEach(key => { keymap[key] = value; });
});
const html = document.documentElement;
html.addEventListener('keydown', e => {
if (e.key in keymap) {
controls.add(e.key);
e.preventDefault();
}
});
html.addEventListener('keyup', e => {
if (e.key in keymap) {
controls.delete(e.key);
e.preventDefault();
}
});
export default function() {
return [...controls].reduce((a, c) => a | keymap[c], 0);
}