Starting on sprite editor
This commit is contained in:
64
spritetab.ts
Normal file
64
spritetab.ts
Normal file
@ -0,0 +1,64 @@
|
||||
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,
|
||||
}
|
Reference in New Issue
Block a user