Fix map stuff, and implement builtin funcs for it
This commit is contained in:
parent
ef8cb2c4cf
commit
b394f81477
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,
|
||||
|
File diff suppressed because one or more lines are too long
@ -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);
|
||||
})
|
||||
}
|
||||
|
@ -46,9 +46,9 @@
|
||||
- [ ] sfx
|
||||
- [ ] music
|
||||
|
||||
- [ ] mget
|
||||
- [ ] mset
|
||||
- [ ] map
|
||||
- [x] mget
|
||||
- [x] mset
|
||||
- [x] map
|
||||
- [ ] tline
|
||||
|
||||
- [ ] peek
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user