Fix map stuff, and implement builtin funcs for it
This commit is contained in:
37
builtins.ts
37
builtins.ts
@@ -8,11 +8,15 @@ import { keyDown, keyPressed, keyReleased } from "./keyboard.ts";
|
||||
import { addToContext, runCode } from "./runcode.ts";
|
||||
import { resetRepl } from "./repl.ts";
|
||||
import { COLOR } from "./colors.ts";
|
||||
import { getSheet, getCodeSheet } from "./sheet.ts";
|
||||
import { getSheet, getCodeSheet, getMapSheet } from "./sheet.ts";
|
||||
import { saveCart, loadCart } from "./cart.ts";
|
||||
|
||||
let spritesheet: number | null = null;
|
||||
|
||||
export const getSpritesheet = () => {
|
||||
return spritesheet;
|
||||
}
|
||||
|
||||
export const useSpritesheet = (sheet: number) => {
|
||||
spritesheet = sheet;
|
||||
}
|
||||
@@ -79,6 +83,37 @@ const faux = {
|
||||
spr: drawSprite,
|
||||
txt: drawText,
|
||||
rect: fillRect,
|
||||
map: (mapSheet: number, tileX: number, tileY: number, screenX: number, screenY: number, tileW: number, tileH: number) => {
|
||||
const originalSpritesheet = getSpritesheet() ?? 0;
|
||||
getMapSheet(mapSheet).forEach(([sprSheet, spr], i) => {
|
||||
const x = i%64;
|
||||
const y = Math.floor(i/64);
|
||||
if (x >= tileX && y >= tileY && x < tileX + tileW && y < tileY + tileH) {
|
||||
useSpritesheet(sprSheet);
|
||||
drawSprite(screenX + (x-tileX)*8, screenY + (y-tileY)*8, spr);
|
||||
}
|
||||
});
|
||||
useSpritesheet(originalSpritesheet);
|
||||
},
|
||||
// Map
|
||||
mgetsht: (mapSheet: number, x: number, y: number) => {
|
||||
if (x < 0 || x >= 64 || y < 0 || y >= 64) {
|
||||
return undefined;
|
||||
}
|
||||
return getMapSheet(mapSheet)[y*64+x][0];
|
||||
},
|
||||
mgetspr: (mapSheet: number, x: number, y: number) => {
|
||||
if (x < 0 || x >= 64 || y < 0 || y >= 64) {
|
||||
return undefined;
|
||||
}
|
||||
return getMapSheet(mapSheet)[y*64+x][1];
|
||||
},
|
||||
mset: (mapSheet: number, x: number, y: number, sprSheet: number, spr: number) => {
|
||||
if (x < 0 || x >= 64 || y < 0 || y >= 64) {
|
||||
return;
|
||||
}
|
||||
getMapSheet(mapSheet)[y*64+x] = [sprSheet, spr];
|
||||
},
|
||||
// Input
|
||||
btn: keyDown,
|
||||
btnp: keyPressed,
|
||||
|
||||
Reference in New Issue
Block a user