Starting on keyboard stuff
This commit is contained in:
parent
fdc8f97aee
commit
253b8e9567
@ -3,6 +3,7 @@ import {
|
||||
clearScreen,
|
||||
} from "./window.ts";
|
||||
import { font } from "./font.ts";
|
||||
import { keyDown, keyPressed, keyReleased } from "./keyboard.ts";
|
||||
// import { codeSheet } from "./sheet.ts";
|
||||
|
||||
// deno-fmt-ignore
|
||||
@ -57,6 +58,9 @@ const faux = {
|
||||
clear_screen: clearScreen,
|
||||
draw_sprite: drawSprite,
|
||||
draw_text: drawText,
|
||||
key_down: keyDown,
|
||||
key_pressed: keyPressed,
|
||||
key_released: keyReleased,
|
||||
// code_sheet: codeSheet,
|
||||
};
|
||||
|
||||
|
17
index.ts
17
index.ts
@ -3,14 +3,25 @@ import {
|
||||
frame,
|
||||
} from "./window.ts";
|
||||
import { codeSheet } from "./sheet.ts";
|
||||
import { refreshKeyboard } from "./keyboard.ts";
|
||||
import { repl } from "./repl.ts";
|
||||
|
||||
const game = codeSheet(0);
|
||||
|
||||
game.init();
|
||||
|
||||
let mode: "play" | "edit" = "edit";
|
||||
|
||||
await mainloop((_t) => {
|
||||
// TODO: use t
|
||||
game.update();
|
||||
game.draw();
|
||||
frame();
|
||||
if (mode === "play") {
|
||||
game.update();
|
||||
game.draw();
|
||||
frame();
|
||||
} else if (mode === "edit") {
|
||||
repl.update();
|
||||
repl.draw();
|
||||
frame();
|
||||
}
|
||||
refreshKeyboard();
|
||||
});
|
||||
|
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;
|
||||
}
|
23
repl.ts
Normal file
23
repl.ts
Normal file
@ -0,0 +1,23 @@
|
||||
import faux from "./builtins.ts";
|
||||
import { getKeysPressed } from "./keyboard.ts";
|
||||
import { font } from "./font.ts";
|
||||
|
||||
let line = "";
|
||||
|
||||
const update = () => {
|
||||
for (const key of getKeysPressed()) {
|
||||
const char = key.toLowerCase();
|
||||
if (char in font) {
|
||||
line += char;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const draw = () => {
|
||||
faux.clear_screen();
|
||||
faux.draw_text(0, 0, "> "+line);
|
||||
}
|
||||
|
||||
export const repl = {
|
||||
update, draw
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user