Spritesheets get 2 pages
This commit is contained in:
41
spritetab.ts
41
spritetab.ts
@@ -1,8 +1,8 @@
|
||||
import { clearScreen, fillRect, setPixelColor } from "./window.ts";
|
||||
import { drawSprite } from "./builtins.ts";
|
||||
import { drawSprite, drawText } from "./builtins.ts";
|
||||
import { COLOR } from "./colors.ts";
|
||||
import { getSpriteSheet, setSheet } from "./sheet.ts";
|
||||
import { mouseHeld, mousePos } from "./mouse.ts";
|
||||
import { mouseClick, mouseHeld, mousePos } from "./mouse.ts";
|
||||
import { inRect, reGrid } from "./util.ts";
|
||||
import { page } from "./viewsheets.ts";
|
||||
import { useSpritesheet } from "./builtins.ts";
|
||||
@@ -10,6 +10,18 @@ import { useSpritesheet } from "./builtins.ts";
|
||||
const state = {
|
||||
selectedSprite: 0,
|
||||
selectedColor: 0,
|
||||
get spriteSheetPage() {
|
||||
return Math.floor(this.selectedSprite/64);
|
||||
},
|
||||
set spriteSheetPage(val) {
|
||||
this.selectedSprite = 64*val+this.spriteWithinPage;
|
||||
},
|
||||
get spriteWithinPage() {
|
||||
return this.selectedSprite%64;
|
||||
},
|
||||
set spriteWithinPage(val) {
|
||||
this.selectedSprite = 64*this.spriteSheetPage+val;
|
||||
},
|
||||
get sprites() {
|
||||
return getSpriteSheet(page.activeSheet);
|
||||
},
|
||||
@@ -38,6 +50,11 @@ const sheetY = 88;
|
||||
const sheetW = 16;
|
||||
const sheetH = 4;
|
||||
|
||||
const spriteSheetPageSwapX = 121;
|
||||
const spriteSheetPageSwapY = 80;
|
||||
const spriteSheetPageSwapW = 7;
|
||||
const spriteSheetPageSwapH = 7;
|
||||
|
||||
const update = () => {
|
||||
if (mouseHeld()) {
|
||||
const {x: mouseX, y: mouseY} = mousePos();
|
||||
@@ -55,7 +72,13 @@ const update = () => {
|
||||
}
|
||||
if (inSheet) {
|
||||
const {x, y} = reGrid(mouseX, mouseY, sheetX, sheetY, spriteW, spriteH);
|
||||
state.selectedSprite = sheetW*y+x;
|
||||
state.spriteWithinPage = sheetW*y+x;
|
||||
}
|
||||
} else if (mouseClick()) {
|
||||
const {x: mouseX, y: mouseY} = mousePos();
|
||||
const inSpriteSheetPageSwap = inRect(mouseX, mouseY, spriteSheetPageSwapX, spriteSheetPageSwapY, spriteSheetPageSwapW, spriteSheetPageSwapH);
|
||||
if (inSpriteSheetPageSwap) {
|
||||
state.spriteSheetPage = (1+state.spriteSheetPage)%2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -103,13 +126,19 @@ const draw = () => {
|
||||
fillRect(spriteX+pixelW*(i%spriteW), spriteY+pixelH*Math.floor(i/spriteW), pixelW, pixelH, pix);
|
||||
});
|
||||
|
||||
// Draw the spritesheet page swap button
|
||||
fillRect(spriteSheetPageSwapX, spriteSheetPageSwapY, spriteSheetPageSwapW, spriteSheetPageSwapH, COLOR.BLUE);
|
||||
drawText(spriteSheetPageSwapX+2, spriteSheetPageSwapY+1, state.spriteSheetPage.toString());
|
||||
|
||||
// Draw the spritesheet
|
||||
fillRect(sheetX, sheetY-1, (sheetW*spriteW), (sheetH*spriteH)+1, COLOR.BLACK);
|
||||
sprites.forEach((_sprite, i) => {
|
||||
Array(64).fill(0).forEach((_, i) => {
|
||||
const sprI = i+64*state.spriteSheetPage;
|
||||
const sprX = sheetX+spriteW*(i%sheetW);
|
||||
const sprY = sheetY+spriteH*Math.floor(i/sheetW);
|
||||
drawSprite(sprX, sprY, i);
|
||||
if (i === selectedSprite) {
|
||||
console.log(sprI, getSpriteSheet(page.activeSheet).length);
|
||||
drawSprite(sprX, sprY, sprI);
|
||||
if (i === state.spriteWithinPage) {
|
||||
outlineRect(sprX, sprY, spriteW, spriteH, COLOR.WHITE);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user