fantasy-console/builtins.ts

67 lines
1.6 KiB
TypeScript
Raw Normal View History

2023-05-01 11:12:08 -07:00
import {
setPixelsInRect,
clearScreen,
2023-05-04 20:14:48 -07:00
fillRect,
2023-05-01 11:12:08 -07:00
} from "./window.ts";
import { font } from "./font.ts";
2023-05-04 20:14:48 -07:00
// import { keyDown, keyPressed, keyReleased } from "./keyboard.ts";
2023-05-06 11:35:02 -07:00
import { addToContext, runCode } from "./runcode.ts";
2023-05-04 20:14:48 -07:00
import { resetRepl } from "./repl.ts";
2023-05-05 11:52:08 -07:00
import { COLOR } from "./colors.ts";
2023-05-06 11:35:02 -07:00
import { getSheet, getCodeSheet } from "./sheet.ts";
2023-05-01 11:12:08 -07:00
2023-05-06 14:49:46 -07:00
let spritesheet: number | null = null;
export const useSpritesheet = (sheet: number) => {
spritesheet = sheet;
}
2023-05-04 20:14:48 -07:00
export const drawSprite = (x: number, y: number, spr: number) => {
2023-05-06 14:49:46 -07:00
if (!spritesheet) {
return;
}
const {sheet_type, value: sprites} = getSheet(spritesheet);
2023-05-05 16:02:23 -07:00
if (sheet_type !== "spritesheet") {
throw "Trying to run a non-code sheet as code."
}
2023-05-01 11:12:08 -07:00
setPixelsInRect(x, y, 8, sprites[spr]);
}
2023-05-05 16:39:51 -07:00
export const drawIcon = (x: number, y: number, icon: Array<number>, color: number) => {
setPixelsInRect(x, y, 8, icon.map(n => n*color));
}
2023-05-05 11:52:08 -07:00
export const drawChar = (x: number, y: number, char: string, color: number) => {
setPixelsInRect(x, y, 4, font[char].map(n => n*color));
2023-05-01 11:12:08 -07:00
}
2023-05-05 11:52:08 -07:00
export const drawText = (x: number, y: number, text: string, color?: number) => {
2023-05-01 11:12:08 -07:00
[...text].forEach((char, i) => {
2023-05-05 11:52:08 -07:00
drawChar(x+4*i, y, char, color ?? COLOR.WHITE);
2023-05-01 11:12:08 -07:00
});
}
2023-05-01 18:42:55 -07:00
const faux = {
2023-05-04 20:14:48 -07:00
cls: () => {
resetRepl();
clearScreen();
},
2023-05-06 14:49:46 -07:00
sprsht: useSpritesheet,
2023-05-04 20:14:48 -07:00
spr: drawSprite,
txt: drawText,
rect: fillRect,
// key_down: keyDown,
// key_pressed: keyPressed,
// key_released: keyReleased,
2023-05-06 11:35:02 -07:00
code: (n: number) => {
return runCode(getCodeSheet(n));
},
2023-05-03 15:17:27 -07:00
log: console.log,
2023-05-04 20:14:48 -07:00
JSON: JSON,
2023-05-01 18:42:55 -07:00
};
2023-05-03 15:17:27 -07:00
for (const key in faux) {
addToContext(key, faux[key as keyof typeof faux]);
}
2023-05-01 18:42:55 -07:00
export default faux;