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,

File diff suppressed because one or more lines are too long

View File

@ -32,14 +32,14 @@ const state = {
setInPatch(i: number, sprsheet: number, sprite: number) {
const xx = this.selectedPatch%overviewW;
const yy = Math.floor(this.selectedPatch/overviewW);
const cell = (yy+patchH*Math.floor(i/patchW))*overviewW*patchW+xx*patchW+i%patchW;
const cell = (yy*patchH+Math.floor(i/patchW))*overviewW*patchW+xx*patchW+i%patchW;
this.map[cell] = [sprsheet, sprite];
},
get patch() {
const xx = this.selectedPatch%overviewW;
const yy = Math.floor(this.selectedPatch/overviewW);
return Array(overviewH).fill(0).flatMap((_, i) => {
const start = (yy+patchH*i)*overviewW*patchW+xx*patchW;
const start = (yy*patchH+i)*overviewW*patchW+xx*patchW;
return this.map.slice(start, start+patchW);
})
}

View File

@ -46,9 +46,9 @@
- [ ] sfx
- [ ] music
- [ ] mget
- [ ] mset
- [ ] map
- [x] mget
- [x] mset
- [x] map
- [ ] tline
- [ ] peek

View File

@ -26,6 +26,10 @@ const update = () => {
if (g) {
const {x, y} = g;
page.activeSheet = 4*y+x;
const sheet = getSheet(page.activeSheet);
if (!sheet) {
console.log(x, y, g);
}
page.tab = getSheet(page.activeSheet).sheet_type;
}
}