| @@ -9,6 +9,11 @@ let clickTimeout = null; | |||||
| let dragOffsetX = null; | let dragOffsetX = null; | ||||
| let dragOffsetY = null; | let dragOffsetY = null; | ||||
| let panning = false; | |||||
| let panReady = true; | |||||
| let panOffsetX = null; | |||||
| let panOffsetY = null; | |||||
| let shiftHeld = false; | let shiftHeld = false; | ||||
| let altHeld = false; | let altHeld = false; | ||||
| @@ -617,7 +622,10 @@ function clickUp(e) { | |||||
| } | } | ||||
| function deselect() { | |||||
| function deselect(e) { | |||||
| if (e !== undefined && e.which == 1) { | |||||
| return; | |||||
| } | |||||
| if (selected) { | if (selected) { | ||||
| selected.classList.remove("selected"); | selected.classList.remove("selected"); | ||||
| } | } | ||||
| @@ -1195,7 +1203,7 @@ function displayEntity(entity, view, x, y, selectEntity = false, refresh = false | |||||
| box.dataset.x = x; | box.dataset.x = x; | ||||
| box.dataset.y = y; | box.dataset.y = y; | ||||
| img.addEventListener("mousedown", e => { testClick(e); e.stopPropagation() }); | |||||
| img.addEventListener("mousedown", e => { if (e.which == 1) { testClick(e); e.stopPropagation() } }); | |||||
| img.addEventListener("touchstart", e => { | img.addEventListener("touchstart", e => { | ||||
| const fakeEvent = { | const fakeEvent = { | ||||
| target: e.target, | target: e.target, | ||||
| @@ -1941,11 +1949,27 @@ document.addEventListener("DOMContentLoaded", () => { | |||||
| } | } | ||||
| checkFitWorld(); | checkFitWorld(); | ||||
| }) | }) | ||||
| document.querySelector("#world").addEventListener("mousedown", e => { | |||||
| // only middle mouse clicks | |||||
| if (e.which == 2) { | |||||
| panning = true; | |||||
| panOffsetX = e.clientX; | |||||
| panOffsetY = e.clientY; | |||||
| } | |||||
| }); | |||||
| document.querySelector("#world").addEventListener("mouseup", e => { | |||||
| if (e.which == 2) { | |||||
| panning = false; | |||||
| } | |||||
| }); | |||||
| document.querySelector("body").appendChild(testCtx.canvas); | document.querySelector("body").appendChild(testCtx.canvas); | ||||
| updateSizes(); | updateSizes(); | ||||
| world.addEventListener("mousedown", e => deselect()); | |||||
| world.addEventListener("mousedown", e => deselect(e)); | |||||
| document.querySelector("#entities").addEventListener("mousedown", deselect); | document.querySelector("#entities").addEventListener("mousedown", deselect); | ||||
| document.querySelector("#display").addEventListener("mousedown", deselect); | document.querySelector("#display").addEventListener("mousedown", deselect); | ||||
| document.addEventListener("mouseup", e => clickUp(e)); | document.addEventListener("mouseup", e => clickUp(e)); | ||||
| @@ -2773,6 +2797,21 @@ document.addEventListener("mousemove", (e) => { | |||||
| document.querySelector("#menubar").classList.remove("hover-delete"); | document.querySelector("#menubar").classList.remove("hover-delete"); | ||||
| } | } | ||||
| } | } | ||||
| console.log(panning) | |||||
| if (panning && panReady) { | |||||
| const worldWidth = config.height.toNumber("meters") / canvasHeight * canvasWidth; | |||||
| const worldHeight = config.height.toNumber("meters"); | |||||
| config.x += (e.clientX - panOffsetX) / canvasWidth * worldWidth; | |||||
| config.y -= (e.clientY - panOffsetY) / canvasHeight * worldHeight; | |||||
| panOffsetX = e.clientX; | |||||
| panOffsetY = e.clientY; | |||||
| console.log(config.x, config.y) | |||||
| updateSizes(); | |||||
| panReady = false; | |||||
| setTimeout(() => panReady=true, 50); | |||||
| } | |||||
| }); | }); | ||||
| document.addEventListener("touchmove", (e) => { | document.addEventListener("touchmove", (e) => { | ||||