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