Camera and outline rect functions
This commit is contained in:
		
							
								
								
									
										11
									
								
								builtins.ts
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								builtins.ts
									
									
									
									
									
								
							| @@ -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) => { | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								index.ts
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								index.ts
									
									
									
									
									
								
							| @@ -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(); | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								spritetab.ts
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								spritetab.ts
									
									
									
									
									
								
							| @@ -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
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								util.ts
									
									
									
									
									
								
							| @@ -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 && | ||||||
| @@ -27,3 +30,18 @@ export function reGrid (x: number, y: number, gridX: number, gridY: number, cell | |||||||
| 		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); | ||||||
|  | 	}) | ||||||
|  | } | ||||||
							
								
								
									
										28
									
								
								window.ts
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								window.ts
									
									
									
									
									
								
							| @@ -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 = () => { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 dylan
					dylan