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 { addToContext, runCode } from "./runcode.ts"; | ||||||
| import { resetRepl } from "./repl.ts"; | import { resetRepl } from "./repl.ts"; | ||||||
| import { COLOR } from "./colors.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"; | import { saveCart, loadCart } from "./cart.ts"; | ||||||
|  |  | ||||||
| let spritesheet: number | null = null; | let spritesheet: number | null = null; | ||||||
|  |  | ||||||
|  | export const getSpritesheet = () => { | ||||||
|  | 	return spritesheet; | ||||||
|  | } | ||||||
|  |  | ||||||
| export const useSpritesheet = (sheet: number) => { | export const useSpritesheet = (sheet: number) => { | ||||||
| 	spritesheet = sheet; | 	spritesheet = sheet; | ||||||
| } | } | ||||||
| @@ -79,6 +83,37 @@ const faux = { | |||||||
| 	spr: drawSprite, | 	spr: drawSprite, | ||||||
| 	txt: drawText, | 	txt: drawText, | ||||||
| 	rect: fillRect, | 	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 | 	// Input | ||||||
| 	btn: keyDown, | 	btn: keyDown, | ||||||
| 	btnp: keyPressed, | 	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) { | 	setInPatch(i: number, sprsheet: number, sprite: number) { | ||||||
| 		const xx = this.selectedPatch%overviewW; | 		const xx = this.selectedPatch%overviewW; | ||||||
| 		const yy = Math.floor(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]; | 		this.map[cell] = [sprsheet, sprite]; | ||||||
| 	}, | 	}, | ||||||
| 	get patch() { | 	get patch() { | ||||||
| 		const xx = this.selectedPatch%overviewW; | 		const xx = this.selectedPatch%overviewW; | ||||||
| 		const yy = Math.floor(this.selectedPatch/overviewW); | 		const yy = Math.floor(this.selectedPatch/overviewW); | ||||||
| 		return Array(overviewH).fill(0).flatMap((_, i) => { | 		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); | 			return this.map.slice(start, start+patchW); | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -46,9 +46,9 @@ | |||||||
| - [ ] sfx | - [ ] sfx | ||||||
| - [ ] music | - [ ] music | ||||||
|  |  | ||||||
| - [ ] mget | - [x] mget | ||||||
| - [ ] mset | - [x] mset | ||||||
| - [ ] map | - [x] map | ||||||
| - [ ] tline | - [ ] tline | ||||||
|  |  | ||||||
| - [ ] peek | - [ ] peek | ||||||
|   | |||||||
| @@ -26,6 +26,10 @@ const update = () => { | |||||||
| 		if (g) { | 		if (g) { | ||||||
| 			const {x, y} = g; | 			const {x, y} = g; | ||||||
| 			page.activeSheet = 4*y+x; | 			page.activeSheet = 4*y+x; | ||||||
|  | 			const sheet = getSheet(page.activeSheet); | ||||||
|  | 			if (!sheet) { | ||||||
|  | 				console.log(x, y, g); | ||||||
|  | 			} | ||||||
| 			page.tab = getSheet(page.activeSheet).sheet_type; | 			page.tab = getSheet(page.activeSheet).sheet_type; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 dylan
					dylan