| @@ -619,7 +619,15 @@ function updateSizes(dirtyOnly = false) { | |||
| updateRatios(); | |||
| if (config.lockYAxis) { | |||
| config.y = 0; | |||
| if (config.groundPos === "high") { | |||
| config.y = -config.height.toNumber("meters") / 2; | |||
| } else if (config.groundPos === "medium") { | |||
| config.y = -config.height.toNumber("meters") / 4; | |||
| } else if (config.groundPos === "low") { | |||
| config.y = -config.height.toNumber("meters") / 6; | |||
| } else { | |||
| config.y = 0; | |||
| } | |||
| } | |||
| drawScales(dirtyOnly); | |||
| @@ -2244,6 +2252,25 @@ const settingsData = { | |||
| } | |||
| } | |||
| }, | |||
| "ground-pos": { | |||
| name: "Ground Position", | |||
| desc: "How high the ground is if the y-axis is locked", | |||
| type: "select", | |||
| default: "bottom", | |||
| options: [ | |||
| "high", | |||
| "medium", | |||
| "low", | |||
| "bottom" | |||
| ], | |||
| get value() { | |||
| return config.groundPos; | |||
| }, | |||
| set value(param) { | |||
| config.groundPos = param; | |||
| updateSizes(); | |||
| } | |||
| }, | |||
| "auto-scale": { | |||
| name: "Auto-Size World", | |||
| desc: "Constantly zoom to fit the largest entity", | |||
| @@ -3724,7 +3751,25 @@ function prepareEntities() { | |||
| button.addEventListener("click", e => { | |||
| const newEntity = entityList[select.value].constructor() | |||
| displayEntity(newEntity, newEntity.defaultView, config.x, config.y + (config.lockYAxis ? 0 : config.height.toNumber("meters")/2), true, true); | |||
| let yOffset = 0; | |||
| if (config.lockYAxis) { | |||
| if (config.groundPos === "high") { | |||
| yOffset = config.height.toNumber("meters")/2; | |||
| } | |||
| else if (config.groundPos === "medium") { | |||
| yOffset = config.height.toNumber("meters")/4; | |||
| } | |||
| else if (config.groundPos === "low") { | |||
| yOffset = config.height.toNumber("meters")/6; | |||
| } | |||
| else if (config.groundPos === "bottom") { | |||
| yOffset = 0; | |||
| } | |||
| } else { | |||
| yOffset = (config.lockYAxis ? 0 : config.height.toNumber("meters")/2); | |||
| } | |||
| displayEntity(newEntity, newEntity.defaultView, config.x, config.y + yOffset, true, true); | |||
| }); | |||
| const categoryOption = document.createElement("option"); | |||