fantasy-console/spritetab.ts

64 lines
1.7 KiB
TypeScript
Raw Normal View History

2023-05-05 14:59:52 -07:00
import { clearScreen, fillRect, setPixelColor } from "./window.ts";
import { fontWidth, fontHeight } from "./font.ts";
import { drawText, drawSprite } from "./builtins.ts";
import { COLOR } from "./colors.ts";
import {getSheet, setSheet} from "./sheet.ts";
const state = {
selectedIndex: 0,
get sprites() {
const {sheet_type, value} = getSheet(2);
if (sheet_type !== "spritesheet") {
throw "Trying to use a non-sprite sheet as a spritesheet."
}
return value;
},
set sprites(val) {
setSheet(0, "spritesheet", val);
}
}
const update = () => {
}
const draw = () => {
const {sprites, selectedIndex} = state;
clearScreen();
fillRect(0, 8, 128, 112, COLOR.BROWN);
// Draw the palette
const paletteX = 88;
const paletteY = 12;
fillRect(paletteX-1, paletteY-1, 32+2, 32+2, COLOR.BLACK);
Object.keys(COLOR).forEach((name, i) => {
const swatchX = paletteX+8*(i%4);
const swatchY = paletteY+8*Math.floor(i/4);
fillRect(swatchX, swatchY, 8, 8, COLOR[name as keyof typeof COLOR]);
if (i === 0) {
// transparent
Array(64).fill(0).map((_z, j) => {
const jx = j%8;
const jy = Math.floor(j/8);
setPixelColor(swatchX+jx, swatchY+jy, (jx+jy)%2 ? COLOR.BLACK : COLOR.WHITE);
})
}
});
// Draw the current sprite
const spriteX = 8;
const spriteY = 12;
fillRect(spriteX-1, spriteY-1, 64+2, 64+2, COLOR.BLACK);
sprites[selectedIndex].forEach((pix, i) => {
fillRect(spriteX+8*(i%8), spriteY+8*Math.floor(i/8), 8, 8, pix);
});
// Draw the spritesheet
const sheetX = 0;
const sheetY = 88;
fillRect(sheetX, sheetY-1, 128, 64+1, COLOR.BLACK);
sprites.forEach((_sprite, i) => {
drawSprite(sheetX+8*(i%16), sheetY+8*Math.floor(i/16), i);
});
}
export const spritetab = {
update,
draw,
}