Can now import Amidst for Minetest biome profiles

This commit is contained in:
Wuzzy 2024-11-30 20:14:30 +01:00
parent c8516aaca5
commit f635b083b9
3 changed files with 34 additions and 14 deletions

View File

@ -179,7 +179,7 @@ h3 {
font-weight: bold; font-weight: bold;
color: #2d8af0; color: #2d8af0;
} }
.exportEmphasis{ .importExportEmphasis{
font-weight: bold; font-weight: bold;
color: #00ff00; color: #00ff00;
} }

View File

@ -197,11 +197,12 @@ A Voronoi diagram is supposed to be here but for some reason it cannot be displa
<div class="configFrame" id="importContainer" style="display:none"> <div class="configFrame" id="importContainer" style="display:none">
<form id="importForm"> <form id="importForm">
<p><b>WARNING</b>: Importing will replace all the biomes!</p> <p><b>WARNING</b>: Importing will replace all the biomes!</p>
<label for="inputImport">Put JSON text here:</label> <label for="inputImport">Put text here:</label>
<br> <br>
<textarea id="inputImport" rows="12" cols="80"></textarea> <textarea id="inputImport" rows="12" cols="80"></textarea>
<br> <br>
<button id="inputImportSubmit" type="button">Import</button> <button id="inputImportJSONSubmit" type="button">Import from <span class="importExportEmphasis">JSON</span></button>
<button id="inputImportAmidstForMinetestSubmit" type="button">Import from <span class="importExportEmphasis">Amidst for Minetest</span> biome profile</button>
<div id="importResultOuter" hidden><br><div id="importResultMessage"></div></div> <div id="importResultOuter" hidden><br><div id="importResultMessage"></div></div>
<hr class="thin"> <hr class="thin">
<div>Hint: Use <a href="https://codeberg.org/Wuzzy/libpov_biome_exporter" title="Luanti mod: libpov_biome_exporter">libpov_biome_exporter</a> to convert game biomes to JSON.</div> <div>Hint: Use <a href="https://codeberg.org/Wuzzy/libpov_biome_exporter" title="Luanti mod: libpov_biome_exporter">libpov_biome_exporter</a> to convert game biomes to JSON.</div>
@ -214,9 +215,9 @@ A Voronoi diagram is supposed to be here but for some reason it cannot be displa
<div class="configFrame" id="exportContainer" style="display:none"> <div class="configFrame" id="exportContainer" style="display:none">
<form id="exportForm"> <form id="exportForm">
<div> <div>
<button id="inputExportJSON" type="button">Export as <span class="exportEmphasis">JSON</span></button> <button id="inputExportJSON" type="button">Export as <span class="importExportEmphasis">JSON</span></button>
<button id="inputExportLua" type="button">Export as <span class="exportEmphasis">Lua</span></button> <button id="inputExportLua" type="button">Export as <span class="importExportEmphasis">Lua</span></button>
<button id="inputExportAmidstForMinetest" type="button">Export as <span class="exportEmphasis">Amidst for Minetest</span> biome profile</button> <button id="inputExportAmidstForMinetest" type="button">Export as <span class="importExportEmphasis">Amidst for Minetest</span> biome profile</button>
<button id="inputExportClear" type="button">Clear</button> <button id="inputExportClear" type="button">Clear</button>
</div> </div>
<div id="exportSectionOuter" hidden><br><span id="exportLabel"></span> <div id="exportSectionOuter" hidden><br><span id="exportLabel"></span>

View File

@ -2402,7 +2402,7 @@ inputExportClear.onclick = function() {
} }
/* Import */ /* Import */
inputImportSubmit.onclick = function() { function importJSON(jsonType) {
let importMessage = function(message) { let importMessage = function(message) {
importResultOuter.hidden = false; importResultOuter.hidden = false;
importResultMessage.innerText = message; importResultMessage.innerText = message;
@ -2416,13 +2416,13 @@ inputImportSubmit.onclick = function() {
} else if (((typeof value) === "number") && ( } else if (((typeof value) === "number") && (
key === "humidity_point" || key === "humidity_point" ||
key === "heat_point" || key === "heat_point" ||
key === "x_min" || jsonType === "libpov" && key === "x_min" ||
key === "x_max" || jsonType === "libpov" && key === "x_max" ||
key === "y_min" || key === "y_min" ||
key === "y_max" || key === "y_max" ||
key === "z_min" || jsonType === "libpov" && key === "z_min" ||
key === "z_max" || jsonType === "libpov" && key === "z_max" ||
key === "colorcode")) { jsonType === "libpov" && key === "colorcode")) {
return value; return value;
} else { } else {
return value; return value;
@ -2454,6 +2454,18 @@ inputImportSubmit.onclick = function() {
return; return;
} }
let innerJSON;
if (jsonType === "libpov") {
innerJSON = parsedJSON;
} else if (jsonType === "amidst_for_minetest") {
if (parsedJSON.biomeList) {
innerJSON = parsedJSON.biomeList;
} else {
importMessage("Import of biome profile failed. No biomeList found.");
return;
}
}
// Populate the temporary newPoints that MAY // Populate the temporary newPoints that MAY
// set the biomePoints if successful // set the biomePoints if successful
let newPoints = []; let newPoints = [];
@ -2470,8 +2482,8 @@ inputImportSubmit.onclick = function() {
{ fieldName: "z_max", type: "number", fieldDefault: MAX_Z }, { fieldName: "z_max", type: "number", fieldDefault: MAX_Z },
{ fieldName: "color_index", type: "number", optional: true }, { fieldName: "color_index", type: "number", optional: true },
] ]
for (let p=0; p<parsedJSON.length; p++) { for (let p=0; p<innerJSON.length; p++) {
let parsedPoint = parsedJSON[p]; let parsedPoint = innerJSON[p];
// Type checking // Type checking
for (let f=0; f<fieldsToCheck.length; f++) { for (let f=0; f<fieldsToCheck.length; f++) {
let field = fieldsToCheck[f].fieldName; let field = fieldsToCheck[f].fieldName;
@ -2530,6 +2542,13 @@ inputImportSubmit.onclick = function() {
} }
} }
inputImportJSONSubmit.onclick = function() {
importJSON("libpov");
}
inputImportAmidstForMinetestSubmit.onclick = function() {
importJSON("amidst_for_minetest");
}
/* Mode events */ /* Mode events */
modernModeButton.onclick = function() { modernModeButton.onclick = function() {
biomeMode = "modern"; biomeMode = "modern";