Add middle mouse navigation on map
This commit is contained in:
parent
694eb006b9
commit
401a76da84
35
maptab.ts
35
maptab.ts
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user