Starting on keyboard stuff
This commit is contained in:
parent
fdc8f97aee
commit
253b8e9567
@ -3,6 +3,7 @@ import {
|
|||||||
clearScreen,
|
clearScreen,
|
||||||
} from "./window.ts";
|
} from "./window.ts";
|
||||||
import { font } from "./font.ts";
|
import { font } from "./font.ts";
|
||||||
|
import { keyDown, keyPressed, keyReleased } from "./keyboard.ts";
|
||||||
// import { codeSheet } from "./sheet.ts";
|
// import { codeSheet } from "./sheet.ts";
|
||||||
|
|
||||||
// deno-fmt-ignore
|
// deno-fmt-ignore
|
||||||
@ -57,6 +58,9 @@ const faux = {
|
|||||||
clear_screen: clearScreen,
|
clear_screen: clearScreen,
|
||||||
draw_sprite: drawSprite,
|
draw_sprite: drawSprite,
|
||||||
draw_text: drawText,
|
draw_text: drawText,
|
||||||
|
key_down: keyDown,
|
||||||
|
key_pressed: keyPressed,
|
||||||
|
key_released: keyReleased,
|
||||||
// code_sheet: codeSheet,
|
// code_sheet: codeSheet,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
11
index.ts
11
index.ts
@ -3,14 +3,25 @@ import {
|
|||||||
frame,
|
frame,
|
||||||
} from "./window.ts";
|
} from "./window.ts";
|
||||||
import { codeSheet } from "./sheet.ts";
|
import { codeSheet } from "./sheet.ts";
|
||||||
|
import { refreshKeyboard } from "./keyboard.ts";
|
||||||
|
import { repl } from "./repl.ts";
|
||||||
|
|
||||||
const game = codeSheet(0);
|
const game = codeSheet(0);
|
||||||
|
|
||||||
game.init();
|
game.init();
|
||||||
|
|
||||||
|
let mode: "play" | "edit" = "edit";
|
||||||
|
|
||||||
await mainloop((_t) => {
|
await mainloop((_t) => {
|
||||||
// TODO: use t
|
// TODO: use t
|
||||||
|
if (mode === "play") {
|
||||||
game.update();
|
game.update();
|
||||||
game.draw();
|
game.draw();
|
||||||
frame();
|
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