Better typing
This commit is contained in:
parent
253b8e9567
commit
99a8c500c7
53
keyboard.ts
53
keyboard.ts
@ -1,4 +1,4 @@
|
|||||||
const keyboard = new Map<string, {first: boolean, repeat: boolean, held: boolean}>();
|
const keyboard = new Map<number, {first: boolean, repeat: boolean, held: boolean}>();
|
||||||
|
|
||||||
export const K = {
|
export const K = {
|
||||||
ESCAPE: 256,
|
ESCAPE: 256,
|
||||||
@ -31,10 +31,35 @@ export const K = {
|
|||||||
ALT_RIGHT: 346,
|
ALT_RIGHT: 346,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const shiftMap = {
|
||||||
|
"1": "!",
|
||||||
|
"2": "@",
|
||||||
|
"3": "#",
|
||||||
|
"4": "$",
|
||||||
|
"5": "%",
|
||||||
|
"6": "^",
|
||||||
|
"7": "&",
|
||||||
|
"8": "*",
|
||||||
|
"9": "(",
|
||||||
|
"0": ")",
|
||||||
|
"`": "~",
|
||||||
|
"-": "_",
|
||||||
|
"=": "+",
|
||||||
|
"[": "{",
|
||||||
|
"]": "}",
|
||||||
|
"\\": "|",
|
||||||
|
";": ":",
|
||||||
|
"'": '"',
|
||||||
|
",": "<",
|
||||||
|
".": ">",
|
||||||
|
"/": "?",
|
||||||
|
}
|
||||||
|
|
||||||
addEventListener("keydown", (evt) => {
|
addEventListener("keydown", (evt) => {
|
||||||
console.log("keydown", evt.key, evt.key.charCodeAt(0));
|
console.log("keydown", evt.key, evt.key.charCodeAt(0));
|
||||||
const isRepeat = keyboard.has(evt.key) && keyboard.get(evt.key)?.held!;
|
const key = evt.key.charCodeAt(0);
|
||||||
keyboard.set(evt.key, {
|
const isRepeat = keyboard.has(key) && keyboard.get(key)?.held!;
|
||||||
|
keyboard.set(key, {
|
||||||
first: !isRepeat,
|
first: !isRepeat,
|
||||||
repeat: isRepeat,
|
repeat: isRepeat,
|
||||||
held: true,
|
held: true,
|
||||||
@ -43,7 +68,8 @@ addEventListener("keydown", (evt) => {
|
|||||||
|
|
||||||
addEventListener("keyup", (evt) => {
|
addEventListener("keyup", (evt) => {
|
||||||
console.log("keyup", evt.key, evt.key.charCodeAt(0));
|
console.log("keyup", evt.key, evt.key.charCodeAt(0));
|
||||||
keyboard.set(evt.key, {
|
const key = evt.key.charCodeAt(0);
|
||||||
|
keyboard.set(key, {
|
||||||
first: false,
|
first: false,
|
||||||
repeat: false,
|
repeat: false,
|
||||||
held: false,
|
held: false,
|
||||||
@ -64,15 +90,28 @@ export const refreshKeyboard = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const keyPressed = (key: string) => {
|
export const keyPressed = (key: string | number) => {
|
||||||
|
if (typeof key === "string") {
|
||||||
|
key = key.charCodeAt(0);
|
||||||
|
}
|
||||||
return keyboard.has(key) && keyboard.get(key)?.repeat!;
|
return keyboard.has(key) && keyboard.get(key)?.repeat!;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const keyDown = (key: string) => {
|
export const keyDown = (key: string | number) => {
|
||||||
|
if (typeof key === "string") {
|
||||||
|
key = key.charCodeAt(0);
|
||||||
|
}
|
||||||
return keyboard.has(key) && keyboard.get(key)?.held!;
|
return keyboard.has(key) && keyboard.get(key)?.held!;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const keyReleased = (key: string) => {
|
export const shiftKeyDown = () => {
|
||||||
|
return keyDown(K.SHIFT_LEFT) || keyDown(K.SHIFT_RIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
|
export const keyReleased = (key: string | number) => {
|
||||||
|
if (typeof key === "string") {
|
||||||
|
key = key.charCodeAt(0);
|
||||||
|
}
|
||||||
return keyboard.has(key) && !keyboard.get(key)?.held!;
|
return keyboard.has(key) && !keyboard.get(key)?.held!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
repl.ts
11
repl.ts
@ -1,12 +1,19 @@
|
|||||||
import faux from "./builtins.ts";
|
import faux from "./builtins.ts";
|
||||||
import { getKeysPressed } from "./keyboard.ts";
|
import { getKeysPressed, shiftKeyDown, shiftMap } from "./keyboard.ts";
|
||||||
import { font } from "./font.ts";
|
import { font } from "./font.ts";
|
||||||
|
|
||||||
let line = "";
|
let line = "";
|
||||||
|
|
||||||
const update = () => {
|
const update = () => {
|
||||||
for (const key of getKeysPressed()) {
|
for (const key of getKeysPressed()) {
|
||||||
const char = key.toLowerCase();
|
let char = String.fromCharCode(key).toLowerCase();
|
||||||
|
if (shiftKeyDown()) {
|
||||||
|
if (char in shiftMap) {
|
||||||
|
char = shiftMap[char as keyof typeof shiftMap];
|
||||||
|
} else {
|
||||||
|
char = char.toUpperCase();
|
||||||
|
}
|
||||||
|
}
|
||||||
if (char in font) {
|
if (char in font) {
|
||||||
line += char;
|
line += char;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user