From 9d2dc99a323556d406344290efa66037f0771da2 Mon Sep 17 00:00:00 2001 From: dylan <> Date: Fri, 5 May 2023 16:39:51 -0700 Subject: [PATCH] Make tabs for code and sprite editors --- builtins.ts | 4 ++++ editmode.ts | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++-- spritetab.ts | 10 +--------- util.ts | 8 ++++++++ 4 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 util.ts diff --git a/builtins.ts b/builtins.ts index 1259105..e43706a 100644 --- a/builtins.ts +++ b/builtins.ts @@ -18,6 +18,10 @@ export const drawSprite = (x: number, y: number, spr: number) => { setPixelsInRect(x, y, 8, sprites[spr]); } +export const drawIcon = (x: number, y: number, icon: Array, color: number) => { + setPixelsInRect(x, y, 8, icon.map(n => n*color)); +} + export const drawChar = (x: number, y: number, char: string, color: number) => { setPixelsInRect(x, y, 4, font[char].map(n => n*color)); } diff --git a/editmode.ts b/editmode.ts index 27ff2b9..938136f 100644 --- a/editmode.ts +++ b/editmode.ts @@ -2,11 +2,58 @@ import { clearScreen, fillRect } from "./window.ts"; import { codetab } from "./codetab.ts"; import { spritetab } from "./spritetab.ts"; import { COLOR } from "./colors.ts"; +import { mouseClick, mousePos } from "./mouse.ts"; +import { drawIcon } from "./builtins.ts"; +import { inRect } from "./util.ts"; -// deno-lint-ignore prefer-const -let tab: "code" | "sprite" | "map" | "sfx" | "music" = "sprite"; +type TabName = "code" | "sprite" | "map" | "sfx" | "music"; + +let tab: TabName = "sprite"; + +const codeIcon = [ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 0, 0, 0, 0, 1, 0, + 0, 1, 0, 0, 0, 0, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, + 0, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +]; + +const spriteIcon = [ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 1, 1, 0, 1, 1, 1, 0, + 0, 1, 1, 1, 1, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +]; + +const buttons: Array<{update: () => void, draw: () => void}> = []; +const makeTabButton = (tabname: TabName, x: number, y: number, icon: Array) => { + buttons.push({ + update() { + if (mouseClick()) { + const {x: mouseX, y: mouseY} = mousePos(); + if (inRect(mouseX, mouseY, x, y, 8, 8)) { + tab = tabname; + } + } + }, + draw() { + drawIcon(x, y, icon, tab === tabname ? COLOR.YELLOW : COLOR.WHITE); + } + }) +} + +makeTabButton("code", 88, 0, codeIcon); +makeTabButton("sprite", 88+8, 0, spriteIcon); const update = () => { + buttons.forEach(button => button.update()); if (tab === "code") { codetab.update(); } else if (tab === "sprite") { @@ -23,6 +70,7 @@ const draw = () => { } fillRect(0, 0, 128, 8, COLOR.RED); fillRect(0, 120, 128, 8, COLOR.RED); + buttons.forEach(button => button.draw()); } export const editmode = { diff --git a/spritetab.ts b/spritetab.ts index 8aa668a..cb89019 100644 --- a/spritetab.ts +++ b/spritetab.ts @@ -3,6 +3,7 @@ import { drawSprite } from "./builtins.ts"; import { COLOR } from "./colors.ts"; import {getSheet, setSheet} from "./sheet.ts"; import { mouseHeld, mousePos } from "./mouse.ts"; +import { inRect } from "./util.ts"; const state = { selectedSprite: 0, @@ -39,15 +40,6 @@ const sheetY = 88; const sheetW = 16; const sheetH = 4; -const inRect = (x: number, y: number, rectX: number, rectY: number, rectW: number, rectH: number) => { - return ( - x >= rectX && - x < rectX+rectW && - y >= rectY && - y < rectY+rectH - ) -} - const reGrid = (x: number, y: number, gridX: number, gridY: number, cellW: number, cellH: number) => { return { x: Math.floor((x-gridX)/cellW), diff --git a/util.ts b/util.ts new file mode 100644 index 0000000..f839908 --- /dev/null +++ b/util.ts @@ -0,0 +1,8 @@ +export const inRect = (x: number, y: number, rectX: number, rectY: number, rectW: number, rectH: number) => { + return ( + x >= rectX && + x < rectX+rectW && + y >= rectY && + y < rectY+rectH + ) +} \ No newline at end of file