Camera and outline rect functions

This commit is contained in:
dylan 2023-05-10 00:06:08 -07:00
parent b394f81477
commit e955a4c00d
6 changed files with 59 additions and 24 deletions

View File

@ -2,6 +2,7 @@ import {
setPixelsInRect, setPixelsInRect,
clearScreen, clearScreen,
fillRect, fillRect,
cameraPos,
} from "./window.ts"; } from "./window.ts";
import { Font, font } from "./font.ts"; import { Font, font } from "./font.ts";
import { keyDown, keyPressed, keyReleased } from "./keyboard.ts"; import { keyDown, keyPressed, keyReleased } from "./keyboard.ts";
@ -10,6 +11,7 @@ import { resetRepl } from "./repl.ts";
import { COLOR } from "./colors.ts"; import { COLOR } from "./colors.ts";
import { getSheet, getCodeSheet, getMapSheet } from "./sheet.ts"; import { getSheet, getCodeSheet, getMapSheet } from "./sheet.ts";
import { saveCart, loadCart } from "./cart.ts"; import { saveCart, loadCart } from "./cart.ts";
import { outlineRect } from "./util.ts";
let spritesheet: number | null = null; let spritesheet: number | null = null;
@ -73,16 +75,23 @@ export const measureText = (text: string) => {
return measureTextFont(text, font); return measureTextFont(text, font);
} }
export const camera = (x: number, y: number) => {
cameraPos.x = x;
cameraPos.y = y;
};
const faux = { const faux = {
// Graphics // Graphics
cls: () => { cls: () => {
resetRepl(); resetRepl();
clearScreen(); clearScreen();
}, },
camera,
sprsht: useSpritesheet, sprsht: useSpritesheet,
spr: drawSprite, spr: drawSprite,
txt: drawText, txt: drawText,
rect: fillRect, rectfill: fillRect,
rect: outlineRect,
map: (mapSheet: number, tileX: number, tileY: number, screenX: number, screenY: number, tileW: number, tileH: number) => { map: (mapSheet: number, tileX: number, tileY: number, screenX: number, screenY: number, tileW: number, tileH: number) => {
const originalSpritesheet = getSpritesheet() ?? 0; const originalSpritesheet = getSpritesheet() ?? 0;
getMapSheet(mapSheet).forEach(([sprSheet, spr], i) => { getMapSheet(mapSheet).forEach(([sprSheet, spr], i) => {

View File

@ -10,6 +10,7 @@ import { repl, resetRepl } from "./repl.ts";
import { addToContext } from "./runcode.ts"; import { addToContext } from "./runcode.ts";
import { editmode } from "./editmode.ts"; import { editmode } from "./editmode.ts";
import { refreshMouse } from "./mouse.ts"; import { refreshMouse } from "./mouse.ts";
import { camera } from "./builtins.ts";
// deno-lint-ignore no-explicit-any // deno-lint-ignore no-explicit-any
let game: any = null; let game: any = null;
@ -48,10 +49,12 @@ await mainloop(async (_t) => {
frame(); frame();
} else if (mode === "repl") { } else if (mode === "repl") {
repl.update(); repl.update();
camera(0, 0);
repl.draw(); repl.draw();
frame(); frame();
} else if (mode === "edit") { } else if (mode === "edit") {
await editmode.update(); await editmode.update();
camera(0, 0);
editmode.draw(); editmode.draw();
frame(); frame();
} }

View File

@ -26,13 +26,13 @@
- [ ] cursor - [ ] cursor
- [ ] color - [ ] color
- [x] cls - [x] cls
- [ ] camera - [x] camera
- [ ] circ - [ ] circ
- [ ] circfill - [ ] circfill
- [ ] oval - [ ] oval
- [ ] ovalfill - [ ] ovalfill
- [ ] line - [ ] line
- [ ] rect - [x] rect
- [x] rectfill - [x] rectfill
- [ ] pal - [ ] pal
- [ ] palt - [ ] palt

View File

@ -1,9 +1,9 @@
import { clearScreen, fillRect, setPixelColor } from "./window.ts"; import { clearScreen, fillRect } from "./window.ts";
import { drawSprite, drawText } from "./builtins.ts"; import { drawSprite, drawText } from "./builtins.ts";
import { COLOR } from "./colors.ts"; import { COLOR } from "./colors.ts";
import { getSpriteSheet, setSheet } from "./sheet.ts"; import { getSpriteSheet, setSheet } from "./sheet.ts";
import { mouseClick, mouseHeld, mousePos } from "./mouse.ts"; import { mouseClick, mouseHeld, mousePos } from "./mouse.ts";
import { inRect, reGrid } from "./util.ts"; import { drawTransparentRect, inRect, outlineRect, reGrid } from "./util.ts";
import { page } from "./viewsheets.ts"; import { page } from "./viewsheets.ts";
import { useSpritesheet } from "./builtins.ts"; import { useSpritesheet } from "./builtins.ts";
@ -83,21 +83,6 @@ const update = () => {
} }
} }
const outlineRect = (x: number, y: number, w: number, h: number, color: number) => {
fillRect(x, y, w, 1, color);
fillRect(x, y, 1, h, color);
fillRect(x+w-1, y, 1, h, color);
fillRect(x, y+h-1, w, 1, color);
}
const drawTransparentRect = (x: number, y: number, w: number, h: number) => {
Array(w*h).fill(0).map((_z, j) => {
const jx = j%w;
const jy = Math.floor(j/w);
setPixelColor(x+jx, y+jy, (jx+jy)%2 ? COLOR.BLACK : COLOR.DARKGRAY);
})
}
const draw = () => { const draw = () => {
const {sprites, selectedSprite, selectedColor} = state; const {sprites, selectedSprite, selectedColor} = state;
clearScreen(); clearScreen();

18
util.ts
View File

@ -1,3 +1,6 @@
import { COLOR } from "./colors.ts";
import { fillRect, setPixelColor } from "./window.ts";
export const inRect = (x: number, y: number, rectX: number, rectY: number, rectW: number, rectH: number) => { export const inRect = (x: number, y: number, rectX: number, rectY: number, rectW: number, rectH: number) => {
return ( return (
x >= rectX && x >= rectX &&
@ -26,4 +29,19 @@ export function reGrid (x: number, y: number, gridX: number, gridY: number, cell
x: gx, x: gx,
y: gy, y: gy,
} }
}
export const outlineRect = (x: number, y: number, w: number, h: number, color: number) => {
fillRect(x, y, w, 1, color);
fillRect(x, y, 1, h, color);
fillRect(x+w-1, y, 1, h, color);
fillRect(x, y+h-1, w, 1, color);
}
export const drawTransparentRect = (x: number, y: number, w: number, h: number) => {
Array(w*h).fill(0).map((_z, j) => {
const jx = j%w;
const jy = Math.floor(j/w);
setPixelColor(x+jx, y+jy, (jx+jy)%2 ? COLOR.BLACK : COLOR.DARKGRAY);
})
} }

View File

@ -4,7 +4,7 @@ import {
gl, gl,
} from "./deps.ts"; } from "./deps.ts";
export {mainloop} from "./deps.ts"; export {mainloop} from "./deps.ts";
import { palette } from "./colors.ts"; import { COLOR, palette } from "./colors.ts";
export const gameWindow = createWindow({ export const gameWindow = createWindow({
title: "Faux", title: "Faux",
@ -128,7 +128,12 @@ const allPixelColors = new Float32Array(
Array(pixelsPerRow*pixelsPerRow).fill(null).flatMap(() => c(1)) Array(pixelsPerRow*pixelsPerRow).fill(null).flatMap(() => c(1))
) )
export const setPixelColor = (x: number, y: number, color: number) => { export const cameraPos = {
x: 0,
y: 0,
}
export const setPixelColorRaw = (x: number, y: number, color: number) => {
if (x < 0 || y < 0 || x > 127 || y > 127) { if (x < 0 || y < 0 || x > 127 || y > 127) {
return; return;
} }
@ -138,18 +143,33 @@ export const setPixelColor = (x: number, y: number, color: number) => {
} }
} }
export const setPixelColor = (x: number, y: number, color: number) => {
return setPixelColorRaw(x - cameraPos.x, y - cameraPos.y, color);
}
export const setPixelsInRect = (x: number, y: number, w: number, pixels: Array<number>) => { export const setPixelsInRect = (x: number, y: number, w: number, pixels: Array<number>) => {
for (let i = 0; i < pixels.length; i++) { for (let i = 0; i < pixels.length; i++) {
setPixelColor(x+i%w, y+Math.floor(i/w), pixels[i]); setPixelColor(x+i%w, y+Math.floor(i/w), pixels[i]);
} }
} }
export const setPixelsInRectRaw = (x: number, y: number, w: number, pixels: Array<number>) => {
for (let i = 0; i < pixels.length; i++) {
setPixelColorRaw(x+i%w, y+Math.floor(i/w), pixels[i]);
}
}
export const fillRect = (x: number, y: number, w: number, h: number, color: number) => { export const fillRect = (x: number, y: number, w: number, h: number, color: number) => {
setPixelsInRect(x, y, w, Array(w*h).fill(color)); setPixelsInRect(x, y, w, Array(w*h).fill(color));
} }
export const clearScreen = () => { export const fillRectRaw = (x: number, y: number, w: number, h: number, color: number) => {
allPixelColors.fill(0); setPixelsInRectRaw(x, y, w, Array(w*h).fill(color));
}
export const clearScreen = (color?: number) => {
fillRectRaw(0, 0, 128, 128, color ?? COLOR.BLACK);
// allPixelColors.fill(0);
} }
export const frame = () => { export const frame = () => {