Fix map stuff, and implement builtin funcs for it
This commit is contained in:
		
							
								
								
									
										37
									
								
								builtins.ts
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								builtins.ts
									
									
									
									
									
								
							| @@ -8,11 +8,15 @@ import { keyDown, keyPressed, keyReleased } from "./keyboard.ts"; | ||||
| import { addToContext, runCode } from "./runcode.ts"; | ||||
| import { resetRepl } from "./repl.ts"; | ||||
| import { COLOR } from "./colors.ts"; | ||||
| import { getSheet, getCodeSheet } from "./sheet.ts"; | ||||
| import { getSheet, getCodeSheet, getMapSheet } from "./sheet.ts"; | ||||
| import { saveCart, loadCart } from "./cart.ts"; | ||||
|  | ||||
| let spritesheet: number | null = null; | ||||
|  | ||||
| export const getSpritesheet = () => { | ||||
| 	return spritesheet; | ||||
| } | ||||
|  | ||||
| export const useSpritesheet = (sheet: number) => { | ||||
| 	spritesheet = sheet; | ||||
| } | ||||
| @@ -79,6 +83,37 @@ const faux = { | ||||
| 	spr: drawSprite, | ||||
| 	txt: drawText, | ||||
| 	rect: fillRect, | ||||
| 	map: (mapSheet: number, tileX: number, tileY: number, screenX: number, screenY: number, tileW: number, tileH: number) => { | ||||
| 		const originalSpritesheet = getSpritesheet() ?? 0; | ||||
| 		getMapSheet(mapSheet).forEach(([sprSheet, spr], i) => { | ||||
| 			const x = i%64; | ||||
| 			const y = Math.floor(i/64); | ||||
| 			if (x >= tileX && y >= tileY && x < tileX + tileW && y < tileY + tileH) { | ||||
| 				useSpritesheet(sprSheet); | ||||
| 				drawSprite(screenX + (x-tileX)*8, screenY + (y-tileY)*8, spr); | ||||
| 			} | ||||
| 		}); | ||||
| 		useSpritesheet(originalSpritesheet); | ||||
| 	}, | ||||
| 	// Map | ||||
| 	mgetsht: (mapSheet: number, x: number, y: number) => { | ||||
| 		if (x < 0 || x >= 64 || y < 0 || y >= 64) { | ||||
| 			return undefined; | ||||
| 		} | ||||
| 		return getMapSheet(mapSheet)[y*64+x][0]; | ||||
| 	}, | ||||
| 	mgetspr: (mapSheet: number, x: number, y: number) => { | ||||
| 		if (x < 0 || x >= 64 || y < 0 || y >= 64) { | ||||
| 			return undefined; | ||||
| 		} | ||||
| 		return getMapSheet(mapSheet)[y*64+x][1]; | ||||
| 	}, | ||||
| 	mset: (mapSheet: number, x: number, y: number, sprSheet: number, spr: number) => { | ||||
| 		if (x < 0 || x >= 64 || y < 0 || y >= 64) { | ||||
| 			return; | ||||
| 		} | ||||
| 		getMapSheet(mapSheet)[y*64+x] = [sprSheet, spr]; | ||||
| 	}, | ||||
| 	// Input | ||||
| 	btn: keyDown, | ||||
| 	btnp: keyPressed, | ||||
|   | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -32,14 +32,14 @@ const state = { | ||||
| 	setInPatch(i: number, sprsheet: number, sprite: number) { | ||||
| 		const xx = this.selectedPatch%overviewW; | ||||
| 		const yy = Math.floor(this.selectedPatch/overviewW); | ||||
| 		const cell = (yy+patchH*Math.floor(i/patchW))*overviewW*patchW+xx*patchW+i%patchW; | ||||
| 		const cell = (yy*patchH+Math.floor(i/patchW))*overviewW*patchW+xx*patchW+i%patchW; | ||||
| 		this.map[cell] = [sprsheet, sprite]; | ||||
| 	}, | ||||
| 	get patch() { | ||||
| 		const xx = this.selectedPatch%overviewW; | ||||
| 		const yy = Math.floor(this.selectedPatch/overviewW); | ||||
| 		return Array(overviewH).fill(0).flatMap((_, i) => { | ||||
| 			const start = (yy+patchH*i)*overviewW*patchW+xx*patchW; | ||||
| 			const start = (yy*patchH+i)*overviewW*patchW+xx*patchW; | ||||
| 			return this.map.slice(start, start+patchW); | ||||
| 		}) | ||||
| 	} | ||||
|   | ||||
| @@ -46,9 +46,9 @@ | ||||
| - [ ] sfx | ||||
| - [ ] music | ||||
|  | ||||
| - [ ] mget | ||||
| - [ ] mset | ||||
| - [ ] map | ||||
| - [x] mget | ||||
| - [x] mset | ||||
| - [x] map | ||||
| - [ ] tline | ||||
|  | ||||
| - [ ] peek | ||||
|   | ||||
| @@ -26,6 +26,10 @@ const update = () => { | ||||
| 		if (g) { | ||||
| 			const {x, y} = g; | ||||
| 			page.activeSheet = 4*y+x; | ||||
| 			const sheet = getSheet(page.activeSheet); | ||||
| 			if (!sheet) { | ||||
| 				console.log(x, y, g); | ||||
| 			} | ||||
| 			page.tab = getSheet(page.activeSheet).sheet_type; | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 dylan
					dylan