Add middle mouse navigation on map

This commit is contained in:
dylan 2023-05-13 15:00:16 -07:00
parent 694eb006b9
commit 401a76da84

View File

@ -2,7 +2,7 @@ import { clearScreen, fillRect } from "./window.ts";
import { drawSprite, drawText } from "./builtins.ts";
import { COLOR } from "./colors.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 { page } from "./viewsheets.ts";
import { useSpritesheet } from "./builtins.ts";
@ -14,6 +14,11 @@ const state = {
selectedSprite: 0,
viewX: 0,
viewY: 0,
dragging: false,
dragFromViewX: 0,
dragFromViewY: 0,
dragFromX: 0,
dragFromY: 0,
get spriteSheetPage() {
return Math.floor(this.selectedSprite/64);
},
@ -70,11 +75,12 @@ const spriteSheetPageSwapW = 7;
const spriteSheetPageSwapH = 7;
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()) {
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) {
const {x, y} = reGrid(mouseX, mouseY, patchX, patchY, spriteW, spriteH);
const cellNumber = patchW*y+x;
@ -88,9 +94,24 @@ const update = () => {
const {x, y} = reGrid(mouseX, mouseY, spriteSheetX, spriteSheetY, spriteW, spriteH);
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()) {
const {x: mouseX, y: mouseY} = mousePos();
const inSpriteSheetPageSwap = inRect(mouseX, mouseY, spriteSheetPageSwapX, spriteSheetPageSwapY, spriteSheetPageSwapW, spriteSheetPageSwapH);
if (inSpriteSheetPageSwap) {
state.spriteSheetPage = (1+state.spriteSheetPage)%2;
}