Quellcode durchsuchen

Add draggable sliders for world and entity scale

tags/v0.1.0
Fen Dweller vor 6 Jahren
Ursprung
Commit
f0c909718f
3 geänderte Dateien mit 103 neuen und 0 gelöschten Zeilen
  1. +35
    -0
      macrovision.css
  2. +2
    -0
      macrovision.html
  3. +66
    -0
      macrovision.js

+ 35
- 0
macrovision.css Datei anzeigen

@@ -173,6 +173,7 @@ body.toggle-entity-name .entity-name {
} }


#world { #world {
position: relative;
flex: 9 0 85vw; flex: 9 0 85vw;
min-height: 85vh; min-height: 85vh;
max-height: 85vh; max-height: 85vh;
@@ -371,4 +372,38 @@ a {


#options-attribution-source { #options-attribution-source {
text-align: center; text-align: center;
}

.floating-slider {
position: absolute;
z-index: 1000;
width: 250px;
height: 50px;
}

#slider-scale {
top: 1%;
left: 5%;
}

#slider-scale:before {
content: "World scale";
position: absolute;
left: 50%;
transform: translate(-50%, 0%);
font-size: 20px;
}

#slider-entity-scale {
display: none;
top: 1%;
right: 5%;
}

#slider-entity-scale:before {
content: "Entity scale";
position: absolute;
left: 50%;
transform: translate(-50%, 0%);
font-size: 20px;
} }

+ 2
- 0
macrovision.html Datei anzeigen

@@ -150,6 +150,8 @@
</span> </span>
</div> </div>
<div id="world"> <div id="world">
<input type="range" step="0.001" min="0" max="2" value="1" class="floating-slider" id="slider-scale"/>
<input type="range" step="0.001" min="0" max="2" value="1" class="floating-slider" id="slider-entity-scale"/>
<div id="entities"> <div id="entities">


</div> </div>


+ 66
- 0
macrovision.js Datei anzeigen

@@ -16,6 +16,12 @@ let entityX;
let canvasWidth; let canvasWidth;
let canvasHeight; let canvasHeight;


let dragScale = 1;
let dragScaleHandle = null;

let dragEntityScale = 1;
let dragEntityScaleHandle = null;

const unitChoices = { const unitChoices = {
length: [ length: [
"meters", "meters",
@@ -358,6 +364,7 @@ function deselect() {
clearViewList(); clearViewList();
clearEntityOptions(); clearEntityOptions();
clearViewOptions(); clearViewOptions();
document.querySelector("#slider-entity-scale").style.display = "none";
} }


function select(target) { function select(target) {
@@ -372,6 +379,7 @@ function select(target) {
configViewList(selectedEntity, selectedEntity.view); configViewList(selectedEntity, selectedEntity.view);
configEntityOptions(selectedEntity, selectedEntity.view); configEntityOptions(selectedEntity, selectedEntity.view);
configViewOptions(selectedEntity, selectedEntity.view); configViewOptions(selectedEntity, selectedEntity.view);
document.querySelector("#slider-entity-scale").style.display = "block";
} }


function configViewList(entity, selectedView) { function configViewList(entity, selectedView) {
@@ -859,9 +867,67 @@ window.onfocus = function () {
window.dispatchEvent(new Event("keydown")); window.dispatchEvent(new Event("keydown"));
} }


function doSliderScale() {
setWorldHeight(config.height, math.multiply(config.height, (9 + sliderScale) / 10));
}

function doSliderEntityScale() {
if (selected) {
console.log(selected)
entities[selected.dataset.key].scale *= (9 + sliderEntityScale) / 10;
updateSizes();
}
}

document.addEventListener("DOMContentLoaded", () => { document.addEventListener("DOMContentLoaded", () => {
prepareEntities(); prepareEntities();


document.querySelector("#slider-scale").addEventListener("mousedown", e => {
dragScaleHandle = setInterval(doSliderScale, 50);
});

document.querySelector("#slider-scale").addEventListener("touchstart", e => {
dragScaleHandle = setInterval(doSliderScale, 50);
});

document.querySelector("#slider-scale").addEventListener("input", e => {
const val = Number(e.target.value);
if (val < 1) {
sliderScale = (val + 1) / 2;
} else {
sliderScale = val;
}
});

document.querySelector("#slider-scale").addEventListener("change", e => {
clearInterval(dragScaleHandle);
dragScaleHandle = null;
e.target.value = 1;
});

document.querySelector("#slider-entity-scale").addEventListener("mousedown", e => {
dragEntityScaleHandle = setInterval(doSliderEntityScale, 50);
});

document.querySelector("#slider-entity-scale").addEventListener("touchstart", e => {
dragEntityScaleHandle = setInterval(doSliderEntityScale, 50);
});

document.querySelector("#slider-entity-scale").addEventListener("input", e => {
const val = Number(e.target.value);
if (val < 1) {
sliderEntityScale = (val + 1) / 2;
} else {
sliderEntityScale = val;
}
});

document.querySelector("#slider-entity-scale").addEventListener("change", e => {
clearInterval(dragEntityScaleHandle);
dragEntityScaleHandle = null;
e.target.value = 1;
});

const sceneChoices = document.querySelector("#scene-choices"); const sceneChoices = document.querySelector("#scene-choices");


Object.entries(scenes).forEach(([id, scene]) => { Object.entries(scenes).forEach(([id, scene]) => {


Laden…
Abbrechen
Speichern