Starting on keyboard stuff
This commit is contained in:
84
keyboard.ts
Normal file
84
keyboard.ts
Normal file
@ -0,0 +1,84 @@
|
||||
const keyboard = new Map<string, {first: boolean, repeat: boolean, held: boolean}>();
|
||||
|
||||
export const K = {
|
||||
ESCAPE: 256,
|
||||
ENTER: 257,
|
||||
TAB: 258,
|
||||
BACKSPACE: 259,
|
||||
DELETE: 261,
|
||||
ARROW_RIGHT: 262,
|
||||
ARROW_LEFT: 263,
|
||||
ARROW_DOWN: 264,
|
||||
ARROW_UP: 265,
|
||||
CAPS_LOCK: 280,
|
||||
F1: 290,
|
||||
F2: 291,
|
||||
F3: 292,
|
||||
F4: 293,
|
||||
F5: 294,
|
||||
F6: 295,
|
||||
F7: 296,
|
||||
F8: 297,
|
||||
F9: 298,
|
||||
F10: 299,
|
||||
F11: 300,
|
||||
F12: 301,
|
||||
SHIFT_LEFT: 340,
|
||||
CTRL_LEFT: 341,
|
||||
ALT_LEFT: 342,
|
||||
SHIFT_RIGHT: 344,
|
||||
CTRL_RIGHT: 345,
|
||||
ALT_RIGHT: 346,
|
||||
}
|
||||
|
||||
addEventListener("keydown", (evt) => {
|
||||
console.log("keydown", evt.key, evt.key.charCodeAt(0));
|
||||
const isRepeat = keyboard.has(evt.key) && keyboard.get(evt.key)?.held!;
|
||||
keyboard.set(evt.key, {
|
||||
first: !isRepeat,
|
||||
repeat: isRepeat,
|
||||
held: true,
|
||||
});
|
||||
});
|
||||
|
||||
addEventListener("keyup", (evt) => {
|
||||
console.log("keyup", evt.key, evt.key.charCodeAt(0));
|
||||
keyboard.set(evt.key, {
|
||||
first: false,
|
||||
repeat: false,
|
||||
held: false,
|
||||
});
|
||||
});
|
||||
|
||||
export const refreshKeyboard = () => {
|
||||
keyboard.forEach(({held}, key) => {
|
||||
if (!held) {
|
||||
keyboard.delete(key);
|
||||
} else {
|
||||
keyboard.set(key, {
|
||||
first: false,
|
||||
repeat: false,
|
||||
held: true,
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export const keyPressed = (key: string) => {
|
||||
return keyboard.has(key) && keyboard.get(key)?.repeat!;
|
||||
}
|
||||
|
||||
export const keyDown = (key: string) => {
|
||||
return keyboard.has(key) && keyboard.get(key)?.held!;
|
||||
}
|
||||
|
||||
export const keyReleased = (key: string) => {
|
||||
return keyboard.has(key) && !keyboard.get(key)?.held!;
|
||||
}
|
||||
|
||||
export const getKeysPressed = () => {
|
||||
const result = [...keyboard.entries()].filter(([_key, value]) => {
|
||||
return value.first || value.repeat;
|
||||
}).map(([key]) => key);
|
||||
return result;
|
||||
}
|
Reference in New Issue
Block a user