Able to eval js with my scope!
This commit is contained in:
parent
5d742d5964
commit
a7b675d541
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
build
|
@ -52,8 +52,10 @@ const drawText = (x: number, y: number, text: string) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
const faux = {
|
||||||
clearScreen,
|
clearScreen,
|
||||||
drawSprite,
|
drawSprite,
|
||||||
drawText,
|
drawText,
|
||||||
}
|
};
|
||||||
|
|
||||||
|
export default faux;
|
31
cart_tools.ts
Normal file
31
cart_tools.ts
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import faux from "./builtins.ts";
|
||||||
|
|
||||||
|
export type SheetType = "code" | "spritesheet" | "map" | "sfx" | "patterns" | "fonts";
|
||||||
|
|
||||||
|
export const parseCodeSheet = (sheet: string) => {
|
||||||
|
try {
|
||||||
|
new Function(sheet);
|
||||||
|
} catch (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
// deno-lint-ignore no-explicit-any
|
||||||
|
const G: any = {...faux, faux, log: console.log};
|
||||||
|
const context = new Proxy(G, {
|
||||||
|
get: (target, prop) => {
|
||||||
|
return target[prop];
|
||||||
|
},
|
||||||
|
set: (target, prop, value) => {
|
||||||
|
target[prop] = value;
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
has: () => {
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const fn = new Function("context", `
|
||||||
|
with (context) {
|
||||||
|
${sheet}
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
return fn(context);
|
||||||
|
}
|
6
cart_unpacked.json
Normal file
6
cart_unpacked.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"sheet_type": "code",
|
||||||
|
"value": "return {init: () => {}, update: () => {}, draw: () => {clearScreen(); drawText(0, 0, 'hello world')}}"
|
||||||
|
}
|
||||||
|
]
|
@ -1,5 +1,9 @@
|
|||||||
{
|
{
|
||||||
"fmt": {
|
"fmt": {
|
||||||
"useTabs": true
|
"useTabs": true
|
||||||
|
},
|
||||||
|
"tasks": {
|
||||||
|
"run": "deno run -A --unstable index.ts",
|
||||||
|
"build": "deno compile --output build/faux -A --unstable index.ts"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
16
font.ts
16
font.ts
@ -1,3 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* Perhaps fonts can be their own type of sheet. By the calculation below, we can fit ~4 fonts per fontsheet
|
||||||
|
*
|
||||||
|
* 3 bits for height
|
||||||
|
* 5 more metadata bits
|
||||||
|
* = 1 byte
|
||||||
|
*
|
||||||
|
* Per character:
|
||||||
|
* - 3 bits for width
|
||||||
|
* - 5 bits for metadata
|
||||||
|
* - 64 bits for pixels
|
||||||
|
* = 9 bytes per character
|
||||||
|
*
|
||||||
|
* 96 chars * 9 bytes =
|
||||||
|
*/
|
||||||
|
|
||||||
// deno-fmt-ignore
|
// deno-fmt-ignore
|
||||||
export const font: {[key: string]: Array<number>} = {
|
export const font: {[key: string]: Array<number>} = {
|
||||||
"a": [
|
"a": [
|
||||||
|
7
index.ts
7
index.ts
@ -2,11 +2,14 @@ import {
|
|||||||
mainloop,
|
mainloop,
|
||||||
frame,
|
frame,
|
||||||
} from "./window.ts";
|
} from "./window.ts";
|
||||||
import game from "./game.ts";
|
import cart from "./cart_unpacked.json" assert { type: "json" };
|
||||||
|
import { parseCodeSheet } from "./cart_tools.ts";
|
||||||
|
|
||||||
|
const game = parseCodeSheet(cart[0].value);
|
||||||
|
|
||||||
game.init();
|
game.init();
|
||||||
|
|
||||||
await mainloop((t) => {
|
await mainloop((_t) => {
|
||||||
// TODO: use t
|
// TODO: use t
|
||||||
game.update();
|
game.update();
|
||||||
game.draw();
|
game.draw();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user