From 17e86ffc77e454ea2fd22db7ec3e94732cd55cdb Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Mon, 3 Feb 2020 14:53:55 -0500 Subject: [PATCH] Switch to using relative positions (0-1 for x and y) instead of absolute coordinates --- macrovision.js | 47 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/macrovision.js b/macrovision.js index 424db719..ae864592 100644 --- a/macrovision.js +++ b/macrovision.js @@ -17,14 +17,36 @@ const entities = { } +function rel2abs(coords) { + const canvasWidth = document.querySelector("#display").clientWidth; + const canvasHeight = document.querySelector("#display").clientHeight; + + return {x: coords.x * canvasWidth, y: coords.y * canvasHeight}; +} + +function abs2rel(coords) { + const canvasWidth = document.querySelector("#display").clientWidth; + const canvasHeight = document.querySelector("#display").clientHeight; + + return {x: coords.x / canvasWidth, y: coords.y / canvasHeight}; +} + +function updateEntityElement(entity, element) { + const position = rel2abs({x: element.dataset.x, y: element.dataset.y}); + + element.style.left = position.x + "px"; + element.style.top = position.y + "px"; + const canvasHeight = document.querySelector("#display").clientHeight; + const pixels = math.divide(entity.height, config.height) * canvasHeight; + element.style.setProperty("--height", pixels + "px"); + +} + function updateSizes() { drawScale(); Object.entries(entities).forEach(([key, entity]) => { const element = document.querySelector("#entity-" + key); - const canvasHeight = document.querySelector("#display").clientHeight; - const pixels = math.divide(entity.height, config.height) * canvasHeight; - - element.style.setProperty("--height", pixels + "px"); + updateEntityElement(entity, element); }); } @@ -148,10 +170,10 @@ function displayEntity(entity, x, y) { img.src = "./pepper.png" img.classList.add("entity"); - img.style.left = x + "px"; - img.style.top = y + "px"; + img.dataset.x = x; + img.dataset.y = y; - img.addEventListener("mousedown", e => clickDown(e)); + img.addEventListener("mousedown", e => {clickDown(e); e.stopPropagation()}); img.id = "entity-" + entityIndex; img.dataset.key = entityIndex; @@ -162,6 +184,7 @@ function displayEntity(entity, x, y) { const world = document.querySelector("#entities"); world.appendChild(img); + updateEntityElement(entity, img); } document.addEventListener("DOMContentLoaded", () => { @@ -169,8 +192,8 @@ document.addEventListener("DOMContentLoaded", () => { const entity = makeEntity(); entity.name = "Green is my pepper"; entity.author = "Fen" - const x = 300 + Math.random() * 600; - const y = 300 + Math.random() * 400; + const x = 0.25 + Math.random() * 0.5; + const y = 0.25 + Math.random() * 0.5; displayEntity(entity, x, y); } @@ -194,8 +217,10 @@ window.addEventListener("resize", () => { document.addEventListener("mousemove", (e) => { if (clicked) { - clicked.style.left = (e.clientX - dragOffsetX) + "px"; - clicked.style.top = (e.clientY - dragOffsetY) + "px"; + const position = abs2rel({x: e.clientX - dragOffsetX, y: e.clientY - dragOffsetY}); + clicked.dataset.x = position.x; + clicked.dataset.y = position.y; + updateEntityElement(entities[clicked.dataset.key], clicked); } });