Kaynağa Gözat

Make flipping work together with rotation; save flipped state

This also consolidates some stuff related to updating CSS properties
into a single function.
master
Fen Dweller 3 yıl önce
ebeveyn
işleme
49ad9bf890
2 değiştirilmiş dosya ile 41 ekleme ve 36 silme
  1. +3
    -6
      macrovision.css
  2. +38
    -30
      macrovision.js

+ 3
- 6
macrovision.css Dosyayı Görüntüle

@@ -24,6 +24,8 @@ body {
.entity-box { .entity-box {
position: absolute; position: absolute;
--height: 100px; --height: 100px;
--flipped: 1;
--rotation: 0deg;
--brightness: 1; --brightness: 1;
max-height: var(--height); max-height: var(--height);
height: var(--height); height: var(--height);
@@ -50,17 +52,12 @@ body.smoothing .entity-box {
-moz-user-drag: none; -moz-user-drag: none;
-o-user-drag: none; -o-user-drag: none;
--offset: -100%; --offset: -100%;
--rotation: 30deg;
transform: translate(-50%, var(--offset)) rotate(var(--rotation));
transform: translate(-50%, var(--offset)) rotate(var(--rotation)) scale(var(--flipped), 1);
filter: brightness(var(--brightness)); filter: brightness(var(--brightness));
user-select: none; user-select: none;
-webkit-user-select: none; -webkit-user-select: none;
} }


.entity-image.flipped {
transform: translate(-50%, var(--offset)) scale(-1, 1);
}

.entity-name { .entity-name {
display: none; display: none;
position: absolute; position: absolute;


+ 38
- 30
macrovision.js Dosyayı Görüntüle

@@ -624,7 +624,7 @@ function updateEntityElement(entity, element) {
const bonus = (extra ? extra : 1) * (1 / (1 - (bottom ? bottom : 0))); const bonus = (extra ? extra : 1) * (1 / (1 - (bottom ? bottom : 0)));
let height = pixels * bonus; let height = pixels * bonus;


// working around a Firefox bug here
// working around a Firefoxi here


if (height > 17895698) { if (height > 17895698) {
height = 0; height = 0;
@@ -633,8 +633,6 @@ function updateEntityElement(entity, element) {
element.style.setProperty("--height", height + "px"); element.style.setProperty("--height", height + "px");
element.style.setProperty("--extra", height - pixels + "px"); element.style.setProperty("--extra", height - pixels + "px");


element.style.setProperty("--brightness", entity.brightness);

if (entity.views[view].rename) if (entity.views[view].rename)
element.querySelector(".entity-name").innerText = element.querySelector(".entity-name").innerText =
entity.name == "" ? "" : entity.views[view].name; entity.name == "" ? "" : entity.views[view].name;
@@ -963,6 +961,18 @@ function pickUnit() {
selectNewUnit(); selectNewUnit();
} }


function updateEntityProperties(element) {
entity = entities[element.dataset.key]

element.style.setProperty("--flipped", entity.flipped ? -1 : 1);
element.style.setProperty(
"--rotation",
(entity.rotation * 180) / Math.PI +
"deg"
);
element.style.setProperty("--brightness", entity.brightness);
}

function updateSizes(dirtyOnly = false) { function updateSizes(dirtyOnly = false) {
updateInfo(); updateInfo();


@@ -1571,6 +1581,7 @@ function makeEntity(info, views, sizes, forms = {}) {
identifier: info.name, identifier: info.name,
scale: 1, scale: 1,
rotation: 0, rotation: 0,
flipped: false,
info: JSON.parse(JSON.stringify(info)), info: JSON.parse(JSON.stringify(info)),
views: JSON.parse(JSON.stringify(views), math.reviver), views: JSON.parse(JSON.stringify(views), math.reviver),
sizes: sizes:
@@ -2777,11 +2788,6 @@ function displayEntity(
img.style.setProperty("--offset", -1 * 100 + "%"); img.style.setProperty("--offset", -1 * 100 + "%");
} }


img.style.setProperty(
"--rotation",
(entity.rotation * 180) / Math.PI + "deg"
);

box.dataset.x = x; box.dataset.x = x;
box.dataset.y = y; box.dataset.y = y;


@@ -2855,6 +2861,8 @@ function displayEntity(
fitWorld(); fitWorld();
} }


updateEntityProperties(box);

if (selectEntity) select(box); if (selectEntity) select(box);


entity.dirty = true; entity.dirty = true;
@@ -4031,7 +4039,8 @@ document.addEventListener("DOMContentLoaded", () => {
.querySelector("#options-brightness-up") .querySelector("#options-brightness-up")
.addEventListener("click", (e) => { .addEventListener("click", (e) => {
if (selected) { if (selected) {
entities[selected.dataset.key].brightness += 1;
entities[selected.dataset.key].brightness += 0.5;
updateEntityProperties(selected);
} }
document.querySelector("#options-brightness-display").innerText = document.querySelector("#options-brightness-display").innerText =
entities[selected.dataset.key].brightness; entities[selected.dataset.key].brightness;
@@ -4042,7 +4051,8 @@ document.addEventListener("DOMContentLoaded", () => {
.querySelector("#options-brightness-down") .querySelector("#options-brightness-down")
.addEventListener("click", (e) => { .addEventListener("click", (e) => {
if (selected) { if (selected) {
entities[selected.dataset.key].brightness -= 1;
entities[selected.dataset.key].brightness -= 0.5;
updateEntityProperties(selected);
} }
document.querySelector("#options-brightness-display").innerText = document.querySelector("#options-brightness-display").innerText =
entities[selected.dataset.key].brightness; entities[selected.dataset.key].brightness;
@@ -4054,14 +4064,8 @@ document.addEventListener("DOMContentLoaded", () => {
.addEventListener("click", (e) => { .addEventListener("click", (e) => {
if (selected) { if (selected) {
entities[selected.dataset.key].rotation -= Math.PI / 4; entities[selected.dataset.key].rotation -= Math.PI / 4;
updateEntityProperties(selected);
} }
selected
.querySelector("img")
.style.setProperty(
"--rotation",
(entities[selected.dataset.key].rotation * 180) / Math.PI +
"deg"
);
updateSizes(); updateSizes();
}); });


@@ -4070,23 +4074,16 @@ document.addEventListener("DOMContentLoaded", () => {
.addEventListener("click", (e) => { .addEventListener("click", (e) => {
if (selected) { if (selected) {
entities[selected.dataset.key].rotation += Math.PI / 4; entities[selected.dataset.key].rotation += Math.PI / 4;
updateEntityProperties(selected);
} }
selected
.querySelector("img")
.style.setProperty(
"--rotation",
(entities[selected.dataset.key].rotation * 180) / Math.PI +
"deg"
);
updateSizes(); updateSizes();
}); });


document.querySelector("#options-flip").addEventListener("click", (e) => { document.querySelector("#options-flip").addEventListener("click", (e) => {
if (selected) { if (selected) {
selected.querySelector(".entity-image").classList.toggle("flipped");
entities[selected.dataset.key].flipped = !entities[selected.dataset.key].flipped
updateEntityProperties(selected);
} }
document.querySelector("#options-brightness-display").innerText =
entities[selected.dataset.key].brightness;
updateSizes(); updateSizes();
}); });


@@ -5863,6 +5860,7 @@ function exportScene() {
customName: entity.name, customName: entity.name,
scale: entity.scale, scale: entity.scale,
rotation: entity.rotation, rotation: entity.rotation,
flipped: entity.flipped,
view: entity.view, view: entity.view,
form: entity.form, form: entity.form,
x: element.dataset.x, x: element.dataset.x,
@@ -6015,6 +6013,17 @@ const migrationDefs = [
entity.rotation = 0; entity.rotation = 0;
}); });
}, },
/*
Migration: 4 -> 5
f
Flipping is now stored
*/

(data) => {
data.entities.forEach((entity) => {
entity.flipped = false;
});
}
]; ];


function migrateScene(data) { function migrateScene(data) {
@@ -6041,6 +6050,7 @@ function importScene(data) {
entity.name = entityInfo.customName; entity.name = entityInfo.customName;
entity.scale = entityInfo.scale; entity.scale = entityInfo.scale;
entity.rotation = entityInfo.rotation; entity.rotation = entityInfo.rotation;
entity.flipped = entityInfo.flipped;
entity.priority = entityInfo.priority; entity.priority = entityInfo.priority;
entity.brightness = entityInfo.brightness; entity.brightness = entityInfo.brightness;
entity.form = entityInfo.form; entity.form = entityInfo.form;
@@ -6103,9 +6113,7 @@ function renderToCanvas() {
ctx.scale(window.devicePixelRatio, window.devicePixelRatio); ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
ctx.translate(x, y); ctx.translate(x, y);
ctx.rotate(entity.rotation); ctx.rotate(entity.rotation);
if (Array.from(img.classList).includes("flipped")) {
ctx.scale(-1, 1);
}
ctx.scale(entity.flipped ? -1 : 1, 1);
ctx.drawImage(img, -xSize / 2, -ySize / 2, xSize, ySize); ctx.drawImage(img, -xSize / 2, -ySize / 2, xSize, ySize);
ctx.restore(); ctx.restore();




Yükleniyor…
İptal
Kaydet