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 { addToContext, runCode } from "./runcode.ts";
|
||||||
import { resetRepl } from "./repl.ts";
|
import { resetRepl } from "./repl.ts";
|
||||||
import { COLOR } from "./colors.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";
|
import { saveCart, loadCart } from "./cart.ts";
|
||||||
|
|
||||||
let spritesheet: number | null = null;
|
let spritesheet: number | null = null;
|
||||||
|
|
||||||
|
export const getSpritesheet = () => {
|
||||||
|
return spritesheet;
|
||||||
|
}
|
||||||
|
|
||||||
export const useSpritesheet = (sheet: number) => {
|
export const useSpritesheet = (sheet: number) => {
|
||||||
spritesheet = sheet;
|
spritesheet = sheet;
|
||||||
}
|
}
|
||||||
@ -79,6 +83,37 @@ const faux = {
|
|||||||
spr: drawSprite,
|
spr: drawSprite,
|
||||||
txt: drawText,
|
txt: drawText,
|
||||||
rect: fillRect,
|
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
|
// Input
|
||||||
btn: keyDown,
|
btn: keyDown,
|
||||||
btnp: keyPressed,
|
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) {
|
setInPatch(i: number, sprsheet: number, sprite: number) {
|
||||||
const xx = this.selectedPatch%overviewW;
|
const xx = this.selectedPatch%overviewW;
|
||||||
const yy = Math.floor(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];
|
this.map[cell] = [sprsheet, sprite];
|
||||||
},
|
},
|
||||||
get patch() {
|
get patch() {
|
||||||
const xx = this.selectedPatch%overviewW;
|
const xx = this.selectedPatch%overviewW;
|
||||||
const yy = Math.floor(this.selectedPatch/overviewW);
|
const yy = Math.floor(this.selectedPatch/overviewW);
|
||||||
return Array(overviewH).fill(0).flatMap((_, i) => {
|
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);
|
return this.map.slice(start, start+patchW);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -46,9 +46,9 @@
|
|||||||
- [ ] sfx
|
- [ ] sfx
|
||||||
- [ ] music
|
- [ ] music
|
||||||
|
|
||||||
- [ ] mget
|
- [x] mget
|
||||||
- [ ] mset
|
- [x] mset
|
||||||
- [ ] map
|
- [x] map
|
||||||
- [ ] tline
|
- [ ] tline
|
||||||
|
|
||||||
- [ ] peek
|
- [ ] peek
|
||||||
|
@ -26,6 +26,10 @@ const update = () => {
|
|||||||
if (g) {
|
if (g) {
|
||||||
const {x, y} = g;
|
const {x, y} = g;
|
||||||
page.activeSheet = 4*y+x;
|
page.activeSheet = 4*y+x;
|
||||||
|
const sheet = getSheet(page.activeSheet);
|
||||||
|
if (!sheet) {
|
||||||
|
console.log(x, y, g);
|
||||||
|
}
|
||||||
page.tab = getSheet(page.activeSheet).sheet_type;
|
page.tab = getSheet(page.activeSheet).sheet_type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user