Add v6 biomes flags

This commit is contained in:
Wuzzy 2023-10-27 19:41:21 +02:00
parent 5fcc3f3e5d
commit 8531bc6c3a
2 changed files with 177 additions and 63 deletions

View File

@ -89,6 +89,25 @@ A Voronoi diagram is supposed to be here but for some reason it cannot be displa
</div>
</div>
<div id="biomeV6ConfigContainerOuter" hidden>
<h2 class="configHeader"><span class="collapser" id="biomeV6ConfigHeaderLink"></span> v6 Biome configuration</h2>
<div id="biomeV6ConfigContainer" class="configFrame">
<form id="biomeV6Form">
<div>Flags:
<input id="inputCheckboxV6Snowbiomes" type="checkbox" checked>
<label for="inputCheckboxV6Snowbiomes">snowbiomes</label>
<input id="inputCheckboxV6Jungles" type="checkbox" checked>
<label for="inputCheckboxV6Jungles">jungles</label>
</div>
<div>
<label for="inputV6FreqDesert">Desert noise threshold:&nbsp;</label>
<input id="inputV6FreqDesert" type="number" value="0.45" step="0.01" size="10" disabled>
</div>
</form>
</div>
</div>
<div id="viewConfigContainerOuter">
<h2 class="configHeader"><span class="collapser" id="viewConfigHeaderLink"></span> Diagram view settings</h2>
<div id="viewConfigContainer" class="configFrame">

221
mibpov.js
View File

@ -131,7 +131,7 @@ let viewY = 0;
let v6_flag_snowbiomes = true;
let v6_flag_jungles = true;
let v6_freq_desert = 0.5;
let v6_freq_desert = 0.45;
// Biome noise settings
const NOISE_OFFSET_DEFAULT = 50;
@ -1148,7 +1148,7 @@ function drawV6() {
return false;
}
if (v6_flag_snowbiomes) {
if (true) {
let cx, cy;
@ -1157,62 +1157,115 @@ function drawV6() {
let cx_snow, cx_hot, cx_snow2, cy_snow2, cx_hot2, cy_hot2;
let _; // unused variable
// Temperate <-> Taiga/Tundra
[cx_snow, _] = biomeCoordsToCanvasPixelCoords(MGV6_FREQ_SNOW, 0);
// Temperate <-> Desert/Jungle
[cx_hot, _] = biomeCoordsToCanvasPixelCoords(MGV6_FREQ_HOT, 0);
let freq_jungle, freq_hot;
if (v6_flag_snowbiomes) {
freq_jungle = MGV6_FREQ_JUNGLE;
freq_hot = MGV6_FREQ_HOT;
// Temperate <-> Taiga/Tundra
[cx_snow, _] = biomeCoordsToCanvasPixelCoords(MGV6_FREQ_SNOW, 0);
// Temperate <-> Desert/Jungle
[cx_hot, _] = biomeCoordsToCanvasPixelCoords(freq_hot, 0);
} else {
// Temperate <-> Desert/Jungle
freq_hot = v6_freq_desert;
[cx_hot, _] = biomeCoordsToCanvasPixelCoords(freq_hot, 0);
freq_jungle = 0.75;
}
// Taiga <-> Tundra <-> Temperate
[cx_snow2, cy_snow2] = biomeCoordsToCanvasPixelCoords(MGV6_FREQ_SNOW, MGV6_FREQ_TAIGA);
// Desert <-> Jungle <-> Temperate
[cx_hot2, cy_hot2] = biomeCoordsToCanvasPixelCoords(MGV6_FREQ_HOT, MGV6_FREQ_JUNGLE);
[cx_hot2, cy_hot2] = biomeCoordsToCanvasPixelCoords(freq_hot, freq_jungle);
if (showCellColors) {
// Render biome areas
context.fillStyle = CELL_COLOR_V6_NORMAL;
// Temperate
context.beginPath();
context.moveTo(cx_snow, 0);
context.lineTo(cx_snow, h);
context.lineTo(cx_hot, h);
context.lineTo(cx_hot, 0);
context.closePath();
context.fill();
// Tundra
context.fillStyle = CELL_COLOR_V6_TUNDRA;
context.beginPath();
context.moveTo(0, 0);
context.lineTo(cx_snow2, 0);
context.lineTo(cx_snow2, cy_snow2);
context.lineTo(0, cy_snow2);
context.closePath();
context.fill();
// Taiga
context.fillStyle = CELL_COLOR_V6_TAIGA;
context.beginPath();
context.moveTo(cx_snow2, cy_snow2);
context.lineTo(cx_snow2, h);
context.lineTo(0, h);
context.lineTo(0, cy_snow2);
context.closePath();
context.fill();
// Jungle
context.fillStyle = CELL_COLOR_V6_JUNGLE;
context.beginPath();
context.moveTo(w, 0);
context.lineTo(cx_hot2, 0);
context.lineTo(cx_hot2, cy_hot2);
context.lineTo(w, cy_hot2);
context.closePath();
context.fill();
// Desert
context.fillStyle = CELL_COLOR_V6_DESERT;
context.beginPath();
context.moveTo(cx_hot2, cy_hot2);
context.lineTo(cx_hot2, h);
context.lineTo(w, h);
context.lineTo(w, cy_snow2);
context.closePath();
context.fill();
if (v6_flag_snowbiomes) {
// Temperate
context.beginPath();
context.moveTo(cx_snow, 0);
context.lineTo(cx_snow, h);
context.lineTo(cx_hot, h);
context.lineTo(cx_hot, 0);
context.closePath();
context.fill();
// Tundra
context.fillStyle = CELL_COLOR_V6_TUNDRA;
context.beginPath();
context.moveTo(0, 0);
context.lineTo(cx_snow2, 0);
context.lineTo(cx_snow2, cy_snow2);
context.lineTo(0, cy_snow2);
context.closePath();
context.fill();
// Taiga
context.fillStyle = CELL_COLOR_V6_TAIGA;
context.beginPath();
context.moveTo(cx_snow2, cy_snow2);
context.lineTo(cx_snow2, h);
context.lineTo(0, h);
context.lineTo(0, cy_snow2);
context.closePath();
context.fill();
// Jungle
context.fillStyle = CELL_COLOR_V6_JUNGLE;
context.beginPath();
context.moveTo(w, 0);
context.lineTo(cx_hot2, 0);
context.lineTo(cx_hot2, cy_hot2);
context.lineTo(w, cy_hot2);
context.closePath();
context.fill();
// Desert
context.fillStyle = CELL_COLOR_V6_DESERT;
context.beginPath();
context.moveTo(cx_hot2, cy_hot2);
context.lineTo(cx_hot2, h);
context.lineTo(w, h);
context.lineTo(w, cy_hot2);
context.closePath();
context.fill();
} else {
// Temperate
context.beginPath();
context.moveTo(0, 0);
context.lineTo(0, h);
context.lineTo(cx_hot, h);
context.lineTo(cx_hot, 0);
context.closePath();
context.fill();
if (v6_flag_jungles) {
// Jungle
context.fillStyle = CELL_COLOR_V6_JUNGLE;
context.beginPath();
context.moveTo(0, 0);
context.lineTo(w, 0);
context.lineTo(w, cy_hot2);
context.lineTo(0, cy_hot2);
context.closePath();
context.fill();
// Desert
context.fillStyle = CELL_COLOR_V6_DESERT;
context.beginPath();
context.moveTo(cx_hot2, cy_hot2);
context.lineTo(cx_hot2, h);
context.lineTo(w, h);
context.lineTo(w, cy_hot2);
context.closePath();
context.fill();
} else {
// Desert
context.fillStyle = CELL_COLOR_V6_DESERT;
context.beginPath();
context.moveTo(cx_hot2, 0);
context.lineTo(cx_hot2, h);
context.lineTo(w, h);
context.lineTo(w, 0);
context.closePath();
context.fill();
}
}
} else {
// Use a "neutral" background color for the whole area if cell colors are disabled
context.fillStyle = CELL_COLOR_NEUTRAL;
@ -1224,20 +1277,30 @@ function drawV6() {
context.strokeStyle = EDGE_COLOR;
context.beginPath();
// Temperate <-> Taiga/Tundra
context.moveTo(cx_snow, 0);
context.lineTo(cx_snow, h);
if (v6_flag_snowbiomes) {
// Temperate <-> Taiga/Tundra
context.moveTo(cx_snow, 0);
context.lineTo(cx_snow, h);
// Taiga <-> Tundra
context.moveTo(cx_snow2, cy_snow2);
context.lineTo(0, cy_snow2);
}
// Temperate <-> Desert/Jungle
context.moveTo(cx_hot, 0);
context.lineTo(cx_hot, h);
// Taiga <-> Tundra
context.moveTo(cx_snow2, cy_snow2);
context.lineTo(0, cy_snow2);
if (v6_flag_snowbiomes || (!v6_flag_jungles)) {
context.moveTo(cx_hot, 0);
context.lineTo(cx_hot, h);
} else {
context.moveTo(cx_hot, cy_hot2);
context.lineTo(cx_hot, h);
}
// Desert <-> Jungle
context.moveTo(cx_hot2, cy_hot2);
context.lineTo(w, cy_hot2);
if (v6_flag_snowbiomes) {
context.moveTo(cx_hot2, cy_hot2);
context.lineTo(w, cy_hot2);
} else if (v6_flag_jungles) {
context.moveTo(0, cy_hot2);
context.lineTo(w, cy_hot2);
}
context.closePath();
context.stroke();
@ -1335,6 +1398,14 @@ function updateWidgetStates() {
inputNoiseHumidityScale.value = noises.humidity.scale;
inputNoiseHumidityOctaves.value = noises.humidity.octaves;
inputNoiseHumidityPersistence.value = noises.humidity.persistence;
if (v6_flag_snowbiomes) {
inputV6FreqDesert.disabled = true;
inputCheckboxV6Jungles.disabled = true;
} else {
inputV6FreqDesert.disabled = false;
inputCheckboxV6Jungles.disabled = false;
}
}
/* To be called when a biome value like heat was changed.
@ -1586,6 +1657,8 @@ function checkboxVarsInit() {
showCellColors = inputCheckboxCellColors.checked;
showGrid = inputCheckboxGrid.checked;
showAxes = inputCheckboxAxes.checked;
v6_flag_snowbiomes = inputCheckboxV6Snowbiomes.checked;
v6_flag_jungles = inputCheckboxV6Jungles.checked;
}
/* Collapses/Expands a config section */
@ -1917,6 +1990,23 @@ inputCheckboxAxes.onchange = function() {
showAxes = this.checked;
draw(false);
}
inputCheckboxV6Snowbiomes.onchange = function() {
v6_flag_snowbiomes = this.checked;
updateWidgetStates();
draw(false);
}
inputCheckboxV6Jungles.onchange = function() {
v6_flag_jungles = this.checked;
draw(false);
}
inputV6FreqDesert.oninput = function() {
let f = +this.value;
if (f === null) {
return;
}
v6_freq_desert = f;
draw(true);
}
/* Noise parameters events */
@ -2221,6 +2311,7 @@ inputImportSubmit.onclick = function() {
modernModeButton.onclick = function() {
biomeMode = "modern";
biomeConfigContainerOuter.hidden = false;
biomeV6ConfigContainerOuter.hidden = true;
importContainerOuter.hidden = false;
exportContainerOuter.hidden = false;
inputCheckboxPoints.disabled = false;
@ -2235,6 +2326,7 @@ modernModeButton.onclick = function() {
v6ModeButton.onclick = function() {
biomeMode = "v6";
biomeConfigContainerOuter.hidden = true;
biomeV6ConfigContainerOuter.hidden = false;
importContainerOuter.hidden = true;
exportContainerOuter.hidden = true;
inputCheckboxPoints.disabled = true;
@ -2252,6 +2344,9 @@ v6ModeButton.onclick = function() {
biomeConfigHeaderLink.onclick = function() {
toggleConfigSectionDisplay(this, biomeConfigContainer);
}
biomeV6ConfigHeaderLink.onclick = function() {
toggleConfigSectionDisplay(this, biomeV6ConfigContainer);
}
viewConfigHeaderLink.onclick = function() {
toggleConfigSectionDisplay(this, viewConfigContainer);
}