Add middle mouse navigation on map
This commit is contained in:
		
							
								
								
									
										35
									
								
								maptab.ts
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								maptab.ts
									
									
									
									
									
								
							| @@ -2,7 +2,7 @@ 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 { getMapSheet, getSheet, setSheet } from "./sheet.ts"; | import { getMapSheet, getSheet, setSheet } from "./sheet.ts"; | ||||||
| import { mouseClick, mouseHeld, mousePos } from "./mouse.ts"; | import { M, mouseClick, mouseDown, mouseHeld, mousePos } from "./mouse.ts"; | ||||||
| import { drawTransparentRect, drawVoidRect, inRect, reGrid } from "./util.ts"; | import { drawTransparentRect, drawVoidRect, inRect, reGrid } from "./util.ts"; | ||||||
| import { page } from "./viewsheets.ts"; | import { page } from "./viewsheets.ts"; | ||||||
| import { useSpritesheet } from "./builtins.ts"; | import { useSpritesheet } from "./builtins.ts"; | ||||||
| @@ -14,6 +14,11 @@ const state = { | |||||||
| 	selectedSprite: 0, | 	selectedSprite: 0, | ||||||
| 	viewX: 0, | 	viewX: 0, | ||||||
| 	viewY: 0, | 	viewY: 0, | ||||||
|  | 	dragging: false, | ||||||
|  | 	dragFromViewX: 0, | ||||||
|  | 	dragFromViewY: 0, | ||||||
|  | 	dragFromX: 0, | ||||||
|  | 	dragFromY: 0, | ||||||
| 	get spriteSheetPage() { | 	get spriteSheetPage() { | ||||||
| 		return Math.floor(this.selectedSprite/64); | 		return Math.floor(this.selectedSprite/64); | ||||||
| 	}, | 	}, | ||||||
| @@ -70,11 +75,12 @@ const spriteSheetPageSwapW = 7; | |||||||
| const spriteSheetPageSwapH = 7; | const spriteSheetPageSwapH = 7; | ||||||
|  |  | ||||||
| const update = () => { | const update = () => { | ||||||
|  | 	const {x: mouseX, y: mouseY} = mousePos(); | ||||||
|  | 	const inPatch = inRect(mouseX, mouseY, patchX, patchY, patchW*spriteW, patchH*spriteH - 2); | ||||||
|  | 	const inSpriteSheetPicker = inRect(mouseX, mouseY, spriteSheetPickerX, spriteSheetPickerY, spriteSheetPickerW*spriteSheetPickerTabW, spriteSheetPickerH*spriteSheetPickerTabH); | ||||||
|  | 	const inSpriteSheet = inRect(mouseX, mouseY, spriteSheetX, spriteSheetY, spriteSheetW*spriteW, spriteSheetH*spriteH); | ||||||
|  | 	const inSpriteSheetPageSwap = inRect(mouseX, mouseY, spriteSheetPageSwapX, spriteSheetPageSwapY, spriteSheetPageSwapW, spriteSheetPageSwapH); | ||||||
| 	if (mouseHeld()) { | 	if (mouseHeld()) { | ||||||
| 		const {x: mouseX, y: mouseY} = mousePos(); |  | ||||||
| 		const inPatch = inRect(mouseX, mouseY, patchX, patchY, patchW*spriteW, patchH*spriteH - 2); |  | ||||||
| 		const inSpriteSheetPicker = inRect(mouseX, mouseY, spriteSheetPickerX, spriteSheetPickerY, spriteSheetPickerW*spriteSheetPickerTabW, spriteSheetPickerH*spriteSheetPickerTabH); |  | ||||||
| 		const inSpriteSheet = inRect(mouseX, mouseY, spriteSheetX, spriteSheetY, spriteSheetW*spriteW, spriteSheetH*spriteH); |  | ||||||
| 		if (inPatch) { | 		if (inPatch) { | ||||||
| 			const {x, y} = reGrid(mouseX, mouseY, patchX, patchY, spriteW, spriteH); | 			const {x, y} = reGrid(mouseX, mouseY, patchX, patchY, spriteW, spriteH); | ||||||
| 			const cellNumber = patchW*y+x; | 			const cellNumber = patchW*y+x; | ||||||
| @@ -88,9 +94,24 @@ const update = () => { | |||||||
| 			const {x, y} = reGrid(mouseX, mouseY, spriteSheetX, spriteSheetY, spriteW, spriteH); | 			const {x, y} = reGrid(mouseX, mouseY, spriteSheetX, spriteSheetY, spriteW, spriteH); | ||||||
| 			state.spriteWithinPage = spriteSheetW*y+x; | 			state.spriteWithinPage = spriteSheetW*y+x; | ||||||
| 		} | 		} | ||||||
|  | 	} else if (mouseDown(M.MIDDLE)) { | ||||||
|  | 		if (inPatch) { | ||||||
|  | 			const {x, y} = reGrid(mouseX, mouseY, patchX, patchY, spriteW, spriteH); | ||||||
|  | 			state.dragging = true; | ||||||
|  | 			state.dragFromX = x; | ||||||
|  | 			state.dragFromY = y; | ||||||
|  | 			state.dragFromViewX = state.viewX; | ||||||
|  | 			state.dragFromViewY = state.viewY; | ||||||
|  | 		} | ||||||
|  | 	} else if (mouseHeld(M.MIDDLE)) { | ||||||
|  | 		if (state.dragging) { | ||||||
|  | 			const {x, y} = reGrid(mouseX, mouseY, patchX, patchY, spriteW, spriteH); | ||||||
|  | 			state.viewX = state.dragFromViewX - x + state.dragFromX; | ||||||
|  | 			state.viewY = state.dragFromViewY - y + state.dragFromY; | ||||||
|  | 		} | ||||||
|  | 	} else if (mouseClick(M.MIDDLE)) { | ||||||
|  | 		state.dragging = false; | ||||||
| 	} else if (mouseClick()) { | 	} else if (mouseClick()) { | ||||||
| 		const {x: mouseX, y: mouseY} = mousePos(); |  | ||||||
| 		const inSpriteSheetPageSwap = inRect(mouseX, mouseY, spriteSheetPageSwapX, spriteSheetPageSwapY, spriteSheetPageSwapW, spriteSheetPageSwapH); |  | ||||||
| 		if (inSpriteSheetPageSwap) { | 		if (inSpriteSheetPageSwap) { | ||||||
| 			state.spriteSheetPage = (1+state.spriteSheetPage)%2; | 			state.spriteSheetPage = (1+state.spriteSheetPage)%2; | ||||||
| 		} | 		} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 dylan
					dylan