Fix map stuff, and implement builtin funcs for it

This commit is contained in:
dylan
2023-05-09 23:50:27 -07:00
parent ef8cb2c4cf
commit b394f81477
5 changed files with 46 additions and 7 deletions

View File

@@ -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,