2023-04-28 20:01:48 -07:00
|
|
|
import {
|
|
|
|
mainloop,
|
2023-04-29 15:16:35 -07:00
|
|
|
frame,
|
2023-05-03 15:17:27 -07:00
|
|
|
clearScreen,
|
2023-05-18 19:45:49 -07:00
|
|
|
} from "./io/window.ts";
|
|
|
|
import { runCode } from "./runtime/runcode.ts";
|
|
|
|
import { getCodeSheet } from "./io/sheet.ts";
|
|
|
|
import { refreshKeyboard, keyPressed, K } from "./io/keyboard.ts";
|
|
|
|
import { repl, resetRepl } from "./repl/repl.ts";
|
|
|
|
import { addToContext } from "./runtime/runcode.ts";
|
|
|
|
import { editmode } from "./editor/editmode.ts";
|
|
|
|
import { refreshMouse } from "./io/mouse.ts";
|
|
|
|
import { camera } from "./runtime/builtins.ts";
|
2023-05-01 18:42:55 -07:00
|
|
|
|
2023-05-05 12:21:14 -07:00
|
|
|
// deno-lint-ignore no-explicit-any
|
|
|
|
let game: any = null;
|
2023-04-29 20:07:06 -07:00
|
|
|
|
2023-05-03 16:47:09 -07:00
|
|
|
let mode: "play" | "edit" | "repl" = "repl";
|
|
|
|
|
2023-05-16 23:45:29 -07:00
|
|
|
addToContext("play", async () => {
|
|
|
|
game = await runCode(getCodeSheet(0));
|
2023-05-05 12:21:14 -07:00
|
|
|
mode = "play";
|
|
|
|
game.init();
|
|
|
|
});
|
2023-05-03 15:17:27 -07:00
|
|
|
|
|
|
|
clearScreen();
|
2023-05-02 18:17:31 -07:00
|
|
|
|
2023-05-06 10:54:27 -07:00
|
|
|
await mainloop(async (_t) => {
|
2023-05-01 11:12:08 -07:00
|
|
|
// TODO: use t
|
2023-05-03 16:47:09 -07:00
|
|
|
if (keyPressed(K.ESCAPE)) {
|
2023-05-04 20:27:01 -07:00
|
|
|
const modeTo = ({
|
|
|
|
play: "repl",
|
|
|
|
edit: "repl",
|
|
|
|
repl: "edit",
|
|
|
|
} as const)[mode];
|
2023-05-03 16:47:09 -07:00
|
|
|
if (mode === "play") {
|
|
|
|
resetRepl();
|
|
|
|
}
|
|
|
|
if (mode === "edit") {
|
|
|
|
clearScreen();
|
|
|
|
}
|
2023-05-04 20:27:01 -07:00
|
|
|
mode = modeTo;
|
2023-05-03 16:47:09 -07:00
|
|
|
} else {
|
|
|
|
if (mode === "play") {
|
2023-05-05 12:21:14 -07:00
|
|
|
if (game) {
|
2023-05-16 23:45:29 -07:00
|
|
|
await game.update();
|
|
|
|
await game.draw();
|
2023-05-05 12:21:14 -07:00
|
|
|
}
|
2023-05-03 16:47:09 -07:00
|
|
|
frame();
|
|
|
|
} else if (mode === "repl") {
|
|
|
|
repl.update();
|
2023-05-10 00:06:08 -07:00
|
|
|
camera(0, 0);
|
2023-05-03 16:47:09 -07:00
|
|
|
repl.draw();
|
|
|
|
frame();
|
|
|
|
} else if (mode === "edit") {
|
2023-05-06 10:54:27 -07:00
|
|
|
await editmode.update();
|
2023-05-10 00:06:08 -07:00
|
|
|
camera(0, 0);
|
2023-05-04 20:27:01 -07:00
|
|
|
editmode.draw();
|
2023-05-03 16:47:09 -07:00
|
|
|
frame();
|
|
|
|
}
|
2023-05-02 18:17:31 -07:00
|
|
|
}
|
|
|
|
refreshKeyboard();
|
2023-05-05 16:02:23 -07:00
|
|
|
refreshMouse();
|
2023-05-06 10:54:27 -07:00
|
|
|
}, false);
|