mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2025-12-17 09:41:24 +01:00
Merge pull request #650 from Azgaar/refactor-heightmap-generator
Refactor heightmap generator
This commit is contained in:
commit
d177d79760
6 changed files with 225 additions and 398 deletions
49
index.html
49
index.html
|
|
@ -1000,17 +1000,18 @@
|
||||||
<td>Map template</td>
|
<td>Map template</td>
|
||||||
<td>
|
<td>
|
||||||
<select id="templateInput" data-stored="template">
|
<select id="templateInput" data-stored="template">
|
||||||
<option value="Volcano">Volcano</option>
|
<option value="volcano">Volcano</option>
|
||||||
<option value="High Island">High Island</option>
|
<option value="highIsland">High Island</option>
|
||||||
<option value="Low Island">Low Island</option>
|
<option value="lowIsland">Low Island</option>
|
||||||
<option value="Continents">Two Continents</option>
|
<option value="continents">Two Continents</option>
|
||||||
<option value="Archipelago">Archipelago</option>
|
<option value="archipelago">Archipelago</option>
|
||||||
<option value="Atoll">Atoll</option>
|
<option value="atoll">Atoll</option>
|
||||||
<option value="Mediterranean">Mediterranean</option>
|
<option value="mediterranean">Mediterranean</option>
|
||||||
<option value="Peninsula">Peninsula</option>
|
<option value="peninsula">Peninsula</option>
|
||||||
<option value="Pangea">Pangea</option>
|
<option value="pangea">Pangea</option>
|
||||||
<option value="Isthmus">Isthmus</option>
|
<option value="isthmus">Isthmus</option>
|
||||||
<option value="Shattered">Shattered</option>
|
<option value="shattered">Shattered</option>
|
||||||
|
<option value="taklamakan">Taklamakan</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
|
|
@ -2332,18 +2333,19 @@
|
||||||
<div id="templateEditor" class="dialog stable" style="display: none">
|
<div id="templateEditor" class="dialog stable" style="display: none">
|
||||||
<div id="templateTop">
|
<div id="templateTop">
|
||||||
<i>Select template: </i><select id="templateSelect" style="width:16em" data-prev="templateCustom" data-tip="Select base template">
|
<i>Select template: </i><select id="templateSelect" style="width:16em" data-prev="templateCustom" data-tip="Select base template">
|
||||||
<option value="templateCustom" selected>Custom</option>
|
<option value="custom" selected>Custom</option>
|
||||||
<option value="templateVolcano">Volcano</option>
|
<option value="volcano">Volcano</option>
|
||||||
<option value="templateHighIsland">High Island</option>
|
<option value="highIsland">High Island</option>
|
||||||
<option value="templateLowIsland">Low Island</option>
|
<option value="lowIsland">Low Island</option>
|
||||||
<option value="templateContinents">Two Continents</option>
|
<option value="continents">Two Continents</option>
|
||||||
<option value="templateArchipelago">Archipelago</option>
|
<option value="archipelago">Archipelago</option>
|
||||||
<option value="templateAtoll">Atoll</option>
|
<option value="atoll">Atoll</option>
|
||||||
<option value="templateMediterranean">Mediterranean</option>
|
<option value="mediterranean">Mediterranean</option>
|
||||||
<option value="templatePeninsula">Peninsula</option>
|
<option value="peninsula">Peninsula</option>
|
||||||
<option value="templatePangea">Pangea</option>
|
<option value="pangea">Pangea</option>
|
||||||
<option value="templateIsthmus">Isthmus</option>
|
<option value="isthmus">Isthmus</option>
|
||||||
<option value="templateShattered">Shattered</option>
|
<option value="shattered">Shattered</option>
|
||||||
|
<option value="taklamakan">Taklamakan</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div id="templateTools">
|
<div id="templateTools">
|
||||||
|
|
@ -4187,6 +4189,7 @@
|
||||||
<script src="libs/delaunator.min.js"></script>
|
<script src="libs/delaunator.min.js"></script>
|
||||||
<script src="modules/utils.js"></script>
|
<script src="modules/utils.js"></script>
|
||||||
<script src="modules/voronoi.js"></script>
|
<script src="modules/voronoi.js"></script>
|
||||||
|
<script src="modules/heightmap-templates.js"></script>
|
||||||
<script src="modules/heightmap-generator.js"></script>
|
<script src="modules/heightmap-generator.js"></script>
|
||||||
<script src="modules/ocean-layers.js"></script>
|
<script src="modules/ocean-layers.js"></script>
|
||||||
<script src="modules/river-generator.js"></script>
|
<script src="modules/river-generator.js"></script>
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
(function (global, factory) {
|
|
||||||
typeof exports === "object" && typeof module !== "undefined" ? (module.exports = factory()) : typeof define === "function" && define.amd ? define(factory) : (global.HeightmapGenerator = factory());
|
|
||||||
})(this, function () {
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
window.HeightmapGenerator = (function () {
|
||||||
let cells, p;
|
let cells, p;
|
||||||
|
|
||||||
const generate = function () {
|
const generate = function () {
|
||||||
|
|
@ -12,46 +10,20 @@
|
||||||
cells.h = new Uint8Array(grid.points.length);
|
cells.h = new Uint8Array(grid.points.length);
|
||||||
|
|
||||||
const template = document.getElementById("templateInput").value;
|
const template = document.getElementById("templateInput").value;
|
||||||
switch (template) {
|
const templateString = HeightmapTemplates[template];
|
||||||
case "Volcano":
|
const steps = templateString.split("\n");
|
||||||
templateVolcano();
|
|
||||||
break;
|
if (!steps.length) throw new Error(`Heightmap template: no steps. Template: ${template}. Steps: ${steps}`);
|
||||||
case "High Island":
|
|
||||||
templateHighIsland();
|
for (const step of steps) {
|
||||||
break;
|
const elements = step.trim().split(" ");
|
||||||
case "Low Island":
|
if (elements.length < 2) throw new Error(`Heightmap template: steps < 2. Template: ${template}. Step: ${elements}`);
|
||||||
templateLowIsland();
|
addStep(...elements);
|
||||||
break;
|
|
||||||
case "Continents":
|
|
||||||
templateContinents();
|
|
||||||
break;
|
|
||||||
case "Archipelago":
|
|
||||||
templateArchipelago();
|
|
||||||
break;
|
|
||||||
case "Atoll":
|
|
||||||
templateAtoll();
|
|
||||||
break;
|
|
||||||
case "Mediterranean":
|
|
||||||
templateMediterranean();
|
|
||||||
break;
|
|
||||||
case "Peninsula":
|
|
||||||
templatePeninsula();
|
|
||||||
break;
|
|
||||||
case "Pangea":
|
|
||||||
templatePangea();
|
|
||||||
break;
|
|
||||||
case "Isthmus":
|
|
||||||
templateIsthmus();
|
|
||||||
break;
|
|
||||||
case "Shattered":
|
|
||||||
templateShattered();
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TIME && console.timeEnd("generateHeightmap");
|
TIME && console.timeEnd("generateHeightmap");
|
||||||
};
|
};
|
||||||
|
|
||||||
// parse template step
|
|
||||||
function addStep(a1, a2, a3, a4, a5) {
|
function addStep(a1, a2, a3, a4, a5) {
|
||||||
if (a1 === "Hill") return addHill(a2, a3, a4, a5);
|
if (a1 === "Hill") return addHill(a2, a3, a4, a5);
|
||||||
if (a1 === "Pit") return addPit(a2, a3, a4, a5);
|
if (a1 === "Pit") return addPit(a2, a3, a4, a5);
|
||||||
|
|
@ -63,211 +35,38 @@
|
||||||
if (a1 === "Smooth") return smooth(a2);
|
if (a1 === "Smooth") return smooth(a2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Heighmap Template: Volcano
|
|
||||||
function templateVolcano() {
|
|
||||||
addStep("Hill", "1", "90-100", "44-56", "40-60");
|
|
||||||
addStep("Multiply", 0.8, "50-100");
|
|
||||||
addStep("Range", "1.5", "30-55", "45-55", "40-60");
|
|
||||||
addStep("Smooth", 2);
|
|
||||||
addStep("Hill", "1.5", "25-35", "25-30", "20-75");
|
|
||||||
addStep("Hill", "1", "25-35", "75-80", "25-75");
|
|
||||||
addStep("Hill", "0.5", "20-25", "10-15", "20-25");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heighmap Template: High Island
|
|
||||||
function templateHighIsland() {
|
|
||||||
addStep("Hill", "1", "90-100", "65-75", "47-53");
|
|
||||||
addStep("Add", 5, "all");
|
|
||||||
addStep("Hill", "6", "20-23", "25-55", "45-55");
|
|
||||||
addStep("Range", "1", "40-50", "45-55", "45-55");
|
|
||||||
addStep("Smooth", 2);
|
|
||||||
addStep("Trough", "2-3", "20-30", "20-30", "20-30");
|
|
||||||
addStep("Trough", "2-3", "20-30", "60-80", "70-80");
|
|
||||||
addStep("Hill", "1", "10-15", "60-60", "50-50");
|
|
||||||
addStep("Hill", "1.5", "13-16", "15-20", "20-75");
|
|
||||||
addStep("Multiply", 0.8, "20-100");
|
|
||||||
addStep("Range", "1.5", "30-40", "15-85", "30-40");
|
|
||||||
addStep("Range", "1.5", "30-40", "15-85", "60-70");
|
|
||||||
addStep("Pit", "2-3", "10-15", "15-85", "20-80");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heighmap Template: Low Island
|
|
||||||
function templateLowIsland() {
|
|
||||||
addStep("Hill", "1", "90-99", "60-80", "45-55");
|
|
||||||
addStep("Hill", "4-5", "25-35", "20-65", "40-60");
|
|
||||||
addStep("Range", "1", "40-50", "45-55", "45-55");
|
|
||||||
addStep("Smooth", 3);
|
|
||||||
addStep("Trough", "1.5", "20-30", "15-85", "20-30");
|
|
||||||
addStep("Trough", "1.5", "20-30", "15-85", "70-80");
|
|
||||||
addStep("Hill", "1.5", "10-15", "5-15", "20-80");
|
|
||||||
addStep("Hill", "1", "10-15", "85-95", "70-80");
|
|
||||||
addStep("Pit", "3-5", "10-15", "15-85", "20-80");
|
|
||||||
addStep("Multiply", 0.4, "20-100");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heighmap Template: Continents
|
|
||||||
function templateContinents() {
|
|
||||||
addStep("Hill", "1", "80-85", "75-80", "40-60");
|
|
||||||
addStep("Hill", "1", "80-85", "20-25", "40-60");
|
|
||||||
addStep("Multiply", 0.22, "20-100");
|
|
||||||
addStep("Hill", "5-6", "15-20", "25-75", "20-82");
|
|
||||||
addStep("Range", ".8", "30-60", "5-15", "20-45");
|
|
||||||
addStep("Range", ".8", "30-60", "5-15", "55-80");
|
|
||||||
addStep("Range", "0-3", "30-60", "80-90", "20-80");
|
|
||||||
addStep("Trough", "3-4", "15-20", "15-85", "20-80");
|
|
||||||
addStep("Strait", "2", "vertical");
|
|
||||||
addStep("Smooth", 2);
|
|
||||||
addStep("Trough", "1-2", "5-10", "45-55", "45-55");
|
|
||||||
addStep("Pit", "3-4", "10-15", "15-85", "20-80");
|
|
||||||
addStep("Hill", "1", "5-10", "40-60", "40-60");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heighmap Template: Archipelago
|
|
||||||
function templateArchipelago() {
|
|
||||||
addStep("Add", 11, "all");
|
|
||||||
addStep("Range", "2-3", "40-60", "20-80", "20-80");
|
|
||||||
addStep("Hill", "5", "15-20", "10-90", "30-70");
|
|
||||||
addStep("Hill", "2", "10-15", "10-30", "20-80");
|
|
||||||
addStep("Hill", "2", "10-15", "60-90", "20-80");
|
|
||||||
addStep("Smooth", 3);
|
|
||||||
addStep("Trough", "10", "20-30", "5-95", "5-95");
|
|
||||||
addStep("Strait", "2", "vertical");
|
|
||||||
addStep("Strait", "2", "horizontal");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heighmap Template: Atoll
|
|
||||||
function templateAtoll() {
|
|
||||||
addStep("Hill", "1", "75-80", "50-60", "45-55");
|
|
||||||
addStep("Hill", "1.5", "30-50", "25-75", "30-70");
|
|
||||||
addStep("Hill", ".5", "30-50", "25-35", "30-70");
|
|
||||||
addStep("Smooth", 1);
|
|
||||||
addStep("Multiply", 0.2, "25-100");
|
|
||||||
addStep("Hill", ".5", "10-20", "50-55", "48-52");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heighmap Template: Mediterranean
|
|
||||||
function templateMediterranean() {
|
|
||||||
addStep("Range", "3-4", "30-50", "0-100", "0-10");
|
|
||||||
addStep("Range", "3-4", "30-50", "0-100", "90-100");
|
|
||||||
addStep("Hill", "5-6", "30-70", "0-100", "0-5");
|
|
||||||
addStep("Hill", "5-6", "30-70", "0-100", "95-100");
|
|
||||||
addStep("Smooth", 1);
|
|
||||||
addStep("Hill", "2-3", "30-70", "0-5", "20-80");
|
|
||||||
addStep("Hill", "2-3", "30-70", "95-100", "20-80");
|
|
||||||
addStep("Multiply", 0.8, "land");
|
|
||||||
addStep("Trough", "3-5", "40-50", "0-100", "0-10");
|
|
||||||
addStep("Trough", "3-5", "40-50", "0-100", "90-100");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heighmap Template: Peninsula
|
|
||||||
function templatePeninsula() {
|
|
||||||
addStep("Range", "2-3", "20-35", "40-50", "0-15");
|
|
||||||
addStep("Add", 5, "all");
|
|
||||||
addStep("Hill", "1", "90-100", "10-90", "0-5");
|
|
||||||
addStep("Add", 13, "all");
|
|
||||||
addStep("Hill", "3-4", "3-5", "5-95", "80-100");
|
|
||||||
addStep("Hill", "1-2", "3-5", "5-95", "40-60");
|
|
||||||
addStep("Trough", "5-6", "10-25", "5-95", "5-95");
|
|
||||||
addStep("Smooth", 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heighmap Template: Pangea
|
|
||||||
function templatePangea() {
|
|
||||||
addStep("Hill", "1-2", "25-40", "15-50", "0-10");
|
|
||||||
addStep("Hill", "1-2", "5-40", "50-85", "0-10");
|
|
||||||
addStep("Hill", "1-2", "25-40", "50-85", "90-100");
|
|
||||||
addStep("Hill", "1-2", "5-40", "15-50", "90-100");
|
|
||||||
addStep("Hill", "8-12", "20-40", "20-80", "48-52");
|
|
||||||
addStep("Smooth", 2);
|
|
||||||
addStep("Multiply", 0.7, "land");
|
|
||||||
addStep("Trough", "3-4", "25-35", "5-95", "10-20");
|
|
||||||
addStep("Trough", "3-4", "25-35", "5-95", "80-90");
|
|
||||||
addStep("Range", "5-6", "30-40", "10-90", "35-65");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heighmap Template: Isthmus
|
|
||||||
function templateIsthmus() {
|
|
||||||
addStep("Hill", "5-10", "15-30", "0-30", "0-20");
|
|
||||||
addStep("Hill", "5-10", "15-30", "10-50", "20-40");
|
|
||||||
addStep("Hill", "5-10", "15-30", "30-70", "40-60");
|
|
||||||
addStep("Hill", "5-10", "15-30", "50-90", "60-80");
|
|
||||||
addStep("Hill", "5-10", "15-30", "70-100", "80-100");
|
|
||||||
addStep("Smooth", 2);
|
|
||||||
addStep("Trough", "4-8", "15-30", "0-30", "0-20");
|
|
||||||
addStep("Trough", "4-8", "15-30", "10-50", "20-40");
|
|
||||||
addStep("Trough", "4-8", "15-30", "30-70", "40-60");
|
|
||||||
addStep("Trough", "4-8", "15-30", "50-90", "60-80");
|
|
||||||
addStep("Trough", "4-8", "15-30", "70-100", "80-100");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heighmap Template: Shattered
|
|
||||||
function templateShattered() {
|
|
||||||
addStep("Hill", "8", "35-40", "15-85", "30-70");
|
|
||||||
addStep("Trough", "10-20", "40-50", "5-95", "5-95");
|
|
||||||
addStep("Range", "5-7", "30-40", "10-90", "20-80");
|
|
||||||
addStep("Pit", "12-20", "30-40", "15-85", "20-80");
|
|
||||||
}
|
|
||||||
|
|
||||||
function getBlobPower() {
|
function getBlobPower() {
|
||||||
switch (+pointsInput.dataset.cells) {
|
const cells = +pointsInput.dataset.cells;
|
||||||
case 1000:
|
if (cells === 1000) return 0.93;
|
||||||
return 0.93;
|
if (cells === 2000) return 0.95;
|
||||||
case 2000:
|
if (cells === 5000) return 0.96;
|
||||||
return 0.95;
|
if (cells === 10000) return 0.98;
|
||||||
case 5000:
|
if (cells === 20000) return 0.985;
|
||||||
return 0.96;
|
if (cells === 30000) return 0.987;
|
||||||
case 10000:
|
if (cells === 40000) return 0.9892;
|
||||||
return 0.98;
|
if (cells === 50000) return 0.9911;
|
||||||
case 20000:
|
if (cells === 60000) return 0.9921;
|
||||||
return 0.985;
|
if (cells === 70000) return 0.9934;
|
||||||
case 30000:
|
if (cells === 80000) return 0.9942;
|
||||||
return 0.987;
|
if (cells === 90000) return 0.9946;
|
||||||
case 40000:
|
if (cells === 100000) return 0.995;
|
||||||
return 0.9892;
|
|
||||||
case 50000:
|
|
||||||
return 0.9911;
|
|
||||||
case 60000:
|
|
||||||
return 0.9921;
|
|
||||||
case 70000:
|
|
||||||
return 0.9934;
|
|
||||||
case 80000:
|
|
||||||
return 0.9942;
|
|
||||||
case 90000:
|
|
||||||
return 0.9946;
|
|
||||||
case 100000:
|
|
||||||
return 0.995;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLinePower() {
|
function getLinePower() {
|
||||||
switch (+pointsInput.dataset.cells) {
|
const cells = +pointsInput.dataset.cells;
|
||||||
case 1000:
|
if (cells === 1000) return 0.74;
|
||||||
return 0.74;
|
if (cells === 2000) return 0.75;
|
||||||
case 2000:
|
if (cells === 5000) return 0.78;
|
||||||
return 0.75;
|
if (cells === 10000) return 0.81;
|
||||||
case 5000:
|
if (cells === 20000) return 0.82;
|
||||||
return 0.78;
|
if (cells === 30000) return 0.83;
|
||||||
case 10000:
|
if (cells === 40000) return 0.84;
|
||||||
return 0.81;
|
if (cells === 50000) return 0.855;
|
||||||
case 20000:
|
if (cells === 60000) return 0.87;
|
||||||
return 0.82;
|
if (cells === 70000) return 0.885;
|
||||||
case 30000:
|
if (cells === 80000) return 0.91;
|
||||||
return 0.83;
|
if (cells === 90000) return 0.92;
|
||||||
case 40000:
|
if (cells === 100000) return 0.93;
|
||||||
return 0.84;
|
|
||||||
case 50000:
|
|
||||||
return 0.855;
|
|
||||||
case 60000:
|
|
||||||
return 0.87;
|
|
||||||
case 70000:
|
|
||||||
return 0.885;
|
|
||||||
case 80000:
|
|
||||||
return 0.91;
|
|
||||||
case 90000:
|
|
||||||
return 0.92;
|
|
||||||
case 100000:
|
|
||||||
return 0.93;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const addHill = function (count, height, rangeX, rangeY) {
|
const addHill = function (count, height, rangeX, rangeY) {
|
||||||
|
|
@ -610,4 +409,4 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
return {generate, addHill, addRange, addTrough, addStrait, addPit, smooth, modify};
|
return {generate, addHill, addRange, addTrough, addStrait, addPit, smooth, modify};
|
||||||
});
|
})();
|
||||||
|
|
|
||||||
126
modules/heightmap-templates.js
Normal file
126
modules/heightmap-templates.js
Normal file
|
|
@ -0,0 +1,126 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
window.HeightmapTemplates = (function () {
|
||||||
|
const volcano = `Hill 1 90-100 44-56 40-60
|
||||||
|
Multiply 0.8 50-100 0 0
|
||||||
|
Range 1.5 30-55 45-55 40-60
|
||||||
|
Smooth 2 0 0 0
|
||||||
|
Hill 1.5 25-35 25-30 20-75
|
||||||
|
Hill 1 25-35 75-80 25-75
|
||||||
|
Hill 0.5 20-25 10-15 20-25`;
|
||||||
|
|
||||||
|
const highIsland = `Hill 1 90-100 65-75 47-53
|
||||||
|
Add 5 all 0 0
|
||||||
|
Hill 6 20-23 25-55 45-55
|
||||||
|
Range 1 40-50 45-55 45-55
|
||||||
|
Smooth 2 0 0 0
|
||||||
|
Trough 2-3 20-30 20-30 20-30
|
||||||
|
Trough 2-3 20-30 60-80 70-80
|
||||||
|
Hill 1 10-15 60-60 50-50
|
||||||
|
Hill 1.5 13-16 15-20 20-75
|
||||||
|
Multiply 0.8 20-100 0 0
|
||||||
|
Range 1.5 30-40 15-85 30-40
|
||||||
|
Range 1.5 30-40 15-85 60-70
|
||||||
|
Pit 2-3 10-15 15-85 20-80`;
|
||||||
|
|
||||||
|
const lowIsland = `Hill 1 90-99 60-80 45-55
|
||||||
|
Hill 4-5 25-35 20-65 40-60
|
||||||
|
Range 1 40-50 45-55 45-55
|
||||||
|
Smooth 3 0 0 0
|
||||||
|
Trough 1.5 20-30 15-85 20-30
|
||||||
|
Trough 1.5 20-30 15-85 70-80
|
||||||
|
Hill 1.5 10-15 5-15 20-80
|
||||||
|
Hill 1 10-15 85-95 70-80
|
||||||
|
Pit 3-5 10-15 15-85 20-80
|
||||||
|
Multiply 0.4 20-100 0 0`;
|
||||||
|
|
||||||
|
const continents = `Hill 1 80-85 75-80 40-60
|
||||||
|
Hill 1 80-85 20-25 40-60
|
||||||
|
Multiply 0.22 20-100 0 0
|
||||||
|
Hill 5-6 15-20 25-75 20-82
|
||||||
|
Range .8 30-60 5-15 20-45
|
||||||
|
Range .8 30-60 5-15 55-80
|
||||||
|
Range 0-3 30-60 80-90 20-80
|
||||||
|
Trough 3-4 15-20 15-85 20-80
|
||||||
|
Strait 2 vertical 0 0
|
||||||
|
Smooth 2 0 0 0
|
||||||
|
Trough 1-2 5-10 45-55 45-55
|
||||||
|
Pit 3-4 10-15 15-85 20-80
|
||||||
|
Hill 1 5-10 40-60 40-60`;
|
||||||
|
|
||||||
|
const archipelago = `Add 11 all 0 0
|
||||||
|
Range 2-3 40-60 20-80 20-80
|
||||||
|
Hill 5 15-20 10-90 30-70
|
||||||
|
Hill 2 10-15 10-30 20-80
|
||||||
|
Hill 2 10-15 60-90 20-80
|
||||||
|
Smooth 3 0 0 0
|
||||||
|
Trough 10 20-30 5-95 5-95
|
||||||
|
Strait 2 vertical 0 0
|
||||||
|
Strait 2 horizontal 0 0`;
|
||||||
|
|
||||||
|
const atoll = `Add 11 all 0 0
|
||||||
|
Range 2-3 40-60 20-80 20-80
|
||||||
|
Hill 5 15-20 10-90 30-70
|
||||||
|
Hill 2 10-15 10-30 20-80
|
||||||
|
Hill 2 10-15 60-90 20-80
|
||||||
|
Smooth 3 0 0 0
|
||||||
|
Trough 10 20-30 5-95 5-95
|
||||||
|
Strait 2 vertical 0 0
|
||||||
|
Strait 2 horizontal 0 0`;
|
||||||
|
|
||||||
|
const mediterranean = `Range 3-4 30-50 0-100 0-10
|
||||||
|
Range 3-4 30-50 0-100 90-100
|
||||||
|
Hill 5-6 30-70 0-100 0-5
|
||||||
|
Hill 5-6 30-70 0-100 95-100
|
||||||
|
Smooth 1 0 0 0
|
||||||
|
Hill 2-3 30-70 0-5 20-80
|
||||||
|
Hill 2-3 30-70 95-100 20-80
|
||||||
|
Multiply 0.8 land 0 0
|
||||||
|
Trough 3-5 40-50 0-100 0-10
|
||||||
|
Trough 3-5 40-50 0-100 90-100`;
|
||||||
|
|
||||||
|
const peninsula = `Range 2-3 20-35 40-50 0-15
|
||||||
|
Add 5 all 0 0
|
||||||
|
Hill 1 90-100 10-90 0-5
|
||||||
|
Add 13 all 0 0
|
||||||
|
Hill 3-4 3-5 5-95 80-100
|
||||||
|
Hill 1-2 3-5 5-95 40-60
|
||||||
|
Trough 5-6 10-25 5-95 5-95
|
||||||
|
Smooth 3 0 0 0`;
|
||||||
|
|
||||||
|
const pangea = `Hill 1-2 25-40 15-50 0-10
|
||||||
|
Hill 1-2 5-40 50-85 0-10
|
||||||
|
Hill 1-2 25-40 50-85 90-100
|
||||||
|
Hill 1-2 5-40 15-50 90-100
|
||||||
|
Hill 8-12 20-40 20-80 48-52
|
||||||
|
Smooth 2 0 0 0
|
||||||
|
Multiply 0.7 land 0 0
|
||||||
|
Trough 3-4 25-35 5-95 10-20
|
||||||
|
Trough 3-4 25-35 5-95 80-90
|
||||||
|
Range 5-6 30-40 10-90 35-65`;
|
||||||
|
|
||||||
|
const isthmus = `Hill 5-10 15-30 0-30 0-20
|
||||||
|
Hill 5-10 15-30 10-50 20-40
|
||||||
|
Hill 5-10 15-30 30-70 40-60
|
||||||
|
Hill 5-10 15-30 50-90 60-80
|
||||||
|
Hill 5-10 15-30 70-100 80-100
|
||||||
|
Smooth 2 0 0 0
|
||||||
|
Trough 4-8 15-30 0-30 0-20
|
||||||
|
Trough 4-8 15-30 10-50 20-40
|
||||||
|
Trough 4-8 15-30 30-70 40-60
|
||||||
|
Trough 4-8 15-30 50-90 60-80
|
||||||
|
Trough 4-8 15-30 70-100 80-100`;
|
||||||
|
|
||||||
|
const shattered = `Hill 8 35-40 15-85 30-70
|
||||||
|
Trough 10-20 40-50 5-95 5-95
|
||||||
|
Range 5-7 30-40 10-90 20-80
|
||||||
|
Pit 12-20 30-40 15-85 20-80`;
|
||||||
|
|
||||||
|
const taklamakan = `Hill 1-3 20-30 30-70 30-70
|
||||||
|
Hill 2-4 60-85 0-5 0-100
|
||||||
|
Hill 2-4 60-85 95-100 0-100
|
||||||
|
Hill 3-4 60-85 20-80 0-5
|
||||||
|
Hill 3-4 60-85 20-80 95-100`;
|
||||||
|
|
||||||
|
return {volcano, highIsland, lowIsland, continents, archipelago, atoll, mediterranean, peninsula, peninsula, pangea, isthmus, shattered, taklamakan};
|
||||||
|
})();
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
// heightmap-editor module. To be added to window as for now
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function editHeightmap() {
|
function editHeightmap() {
|
||||||
|
|
@ -821,118 +820,15 @@ function editHeightmap() {
|
||||||
body.setAttribute("data-changed", 0);
|
body.setAttribute("data-changed", 0);
|
||||||
body.innerHTML = "";
|
body.innerHTML = "";
|
||||||
|
|
||||||
if (template === "templateVolcano") {
|
const templateString = HeightmapTemplates[template];
|
||||||
addStep("Hill", "1", "90-100", "44-56", "40-60");
|
if (!templateString) return;
|
||||||
addStep("Multiply", 0.8, "50-100");
|
|
||||||
addStep("Range", "1.5", "30-55", "45-55", "40-60");
|
const steps = templateString.split("\n");
|
||||||
addStep("Smooth", 2);
|
if (!steps.length) return tip(`Heightmap template: no steps defined`, false, "error");
|
||||||
addStep("Hill", "1.5", "25-35", "25-30", "20-75");
|
|
||||||
addStep("Hill", "1", "25-35", "75-80", "25-75");
|
for (const step of steps) {
|
||||||
addStep("Hill", "0.5", "20-25", "10-15", "20-25");
|
const elements = step.trim().split(" ");
|
||||||
} else if (template === "templateHighIsland") {
|
addStep(...elements);
|
||||||
addStep("Hill", "1", "90-100", "65-75", "47-53");
|
|
||||||
addStep("Add", 5, "all");
|
|
||||||
addStep("Hill", "6", "20-23", "25-55", "45-55");
|
|
||||||
addStep("Range", "1", "40-50", "45-55", "45-55");
|
|
||||||
addStep("Smooth", 2);
|
|
||||||
addStep("Trough", "2-3", "20-30", "20-30", "20-30");
|
|
||||||
addStep("Trough", "2-3", "20-30", "60-80", "70-80");
|
|
||||||
addStep("Hill", "1", "10-15", "60-60", "50-50");
|
|
||||||
addStep("Hill", "1.5", "13-16", "15-20", "20-75");
|
|
||||||
addStep("Multiply", 0.8, "20-100");
|
|
||||||
addStep("Range", "1.5", "30-40", "15-85", "30-40");
|
|
||||||
addStep("Range", "1.5", "30-40", "15-85", "60-70");
|
|
||||||
addStep("Pit", "2-3", "10-15", "15-85", "20-80");
|
|
||||||
} else if (template === "templateLowIsland") {
|
|
||||||
addStep("Hill", "1", "90-99", "60-80", "45-55");
|
|
||||||
addStep("Hill", "4-5", "25-35", "20-65", "40-60");
|
|
||||||
addStep("Range", "1", "40-50", "45-55", "45-55");
|
|
||||||
addStep("Smooth", 3);
|
|
||||||
addStep("Trough", "1.5", "20-30", "15-85", "20-30");
|
|
||||||
addStep("Trough", "1.5", "20-30", "15-85", "70-80");
|
|
||||||
addStep("Hill", "1.5", "10-15", "5-15", "20-80");
|
|
||||||
addStep("Hill", "1", "10-15", "85-95", "70-80");
|
|
||||||
addStep("Pit", "3-5", "10-15", "15-85", "20-80");
|
|
||||||
addStep("Multiply", 0.4, "20-100");
|
|
||||||
} else if (template === "templateContinents") {
|
|
||||||
addStep("Hill", "1", "80-85", "75-80", "40-60");
|
|
||||||
addStep("Hill", "1", "80-85", "20-25", "40-60");
|
|
||||||
addStep("Multiply", 0.22, "20-100");
|
|
||||||
addStep("Hill", "5-6", "15-20", "25-75", "20-82");
|
|
||||||
addStep("Range", ".8", "30-60", "5-15", "20-45");
|
|
||||||
addStep("Range", ".8", "30-60", "5-15", "55-80");
|
|
||||||
addStep("Range", "0-3", "30-60", "80-90", "20-80");
|
|
||||||
addStep("Trough", "3-4", "15-20", "15-85", "20-80");
|
|
||||||
addStep("Strait", "2", "vertical");
|
|
||||||
addStep("Smooth", 2);
|
|
||||||
addStep("Trough", "1-2", "5-10", "45-55", "45-55");
|
|
||||||
addStep("Pit", "3-4", "10-15", "15-85", "20-80");
|
|
||||||
addStep("Hill", "1", "5-10", "40-60", "40-60");
|
|
||||||
} else if (template === "templateArchipelago") {
|
|
||||||
addStep("Add", 11, "all");
|
|
||||||
addStep("Range", "2-3", "40-60", "20-80", "20-80");
|
|
||||||
addStep("Hill", "5", "15-20", "10-90", "30-70");
|
|
||||||
addStep("Hill", "2", "10-15", "10-30", "20-80");
|
|
||||||
addStep("Hill", "2", "10-15", "60-90", "20-80");
|
|
||||||
addStep("Smooth", 3);
|
|
||||||
addStep("Trough", "10", "20-30", "5-95", "5-95");
|
|
||||||
addStep("Strait", "2", "vertical");
|
|
||||||
addStep("Strait", "2", "horizontal");
|
|
||||||
} else if (template === "templateAtoll") {
|
|
||||||
addStep("Hill", "1", "75-80", "50-60", "45-55");
|
|
||||||
addStep("Hill", "1.5", "30-50", "25-75", "30-70");
|
|
||||||
addStep("Hill", ".5", "30-50", "25-35", "30-70");
|
|
||||||
addStep("Smooth", 1);
|
|
||||||
addStep("Multiply", 0.2, "25-100");
|
|
||||||
addStep("Hill", ".5", "10-20", "50-55", "48-52");
|
|
||||||
} else if (template === "templateMediterranean") {
|
|
||||||
addStep("Range", "3-4", "30-50", "0-100", "0-10");
|
|
||||||
addStep("Range", "3-4", "30-50", "0-100", "90-100");
|
|
||||||
addStep("Hill", "5-6", "30-70", "0-100", "0-5");
|
|
||||||
addStep("Hill", "5-6", "30-70", "0-100", "95-100");
|
|
||||||
addStep("Smooth", 1);
|
|
||||||
addStep("Hill", "2-3", "30-70", "0-5", "20-80");
|
|
||||||
addStep("Hill", "2-3", "30-70", "95-100", "20-80");
|
|
||||||
addStep("Multiply", 0.8, "land");
|
|
||||||
addStep("Trough", "3-5", "40-50", "0-100", "0-10");
|
|
||||||
addStep("Trough", "3-5", "40-50", "0-100", "90-100");
|
|
||||||
} else if (template === "templatePeninsula") {
|
|
||||||
addStep("Range", "2-3", "20-35", "40-50", "0-15");
|
|
||||||
addStep("Add", 5, "all");
|
|
||||||
addStep("Hill", "1", "90-100", "10-90", "0-5");
|
|
||||||
addStep("Add", 13, "all");
|
|
||||||
addStep("Hill", "3-4", "3-5", "5-95", "80-100");
|
|
||||||
addStep("Hill", "1-2", "3-5", "5-95", "40-60");
|
|
||||||
addStep("Trough", "5-6", "10-25", "5-95", "5-95");
|
|
||||||
addStep("Smooth", 3);
|
|
||||||
} else if (template === "templatePangea") {
|
|
||||||
addStep("Hill", "1-2", "25-40", "15-50", "0-10");
|
|
||||||
addStep("Hill", "1-2", "5-40", "50-85", "0-10");
|
|
||||||
addStep("Hill", "1-2", "25-40", "50-85", "90-100");
|
|
||||||
addStep("Hill", "1-2", "5-40", "15-50", "90-100");
|
|
||||||
addStep("Hill", "8-12", "20-40", "20-80", "48-52");
|
|
||||||
addStep("Smooth", 2);
|
|
||||||
addStep("Multiply", 0.7, "land");
|
|
||||||
addStep("Trough", "3-4", "25-35", "5-95", "10-20");
|
|
||||||
addStep("Trough", "3-4", "25-35", "5-95", "80-90");
|
|
||||||
addStep("Range", "5-6", "30-40", "10-90", "35-65");
|
|
||||||
} else if (template === "templateIsthmus") {
|
|
||||||
addStep("Hill", "5-10", "15-30", "0-30", "0-20");
|
|
||||||
addStep("Hill", "5-10", "15-30", "10-50", "20-40");
|
|
||||||
addStep("Hill", "5-10", "15-30", "30-70", "40-60");
|
|
||||||
addStep("Hill", "5-10", "15-30", "50-90", "60-80");
|
|
||||||
addStep("Hill", "5-10", "15-30", "70-100", "80-100");
|
|
||||||
addStep("Smooth", 2);
|
|
||||||
addStep("Trough", "4-8", "15-30", "0-30", "0-20");
|
|
||||||
addStep("Trough", "4-8", "15-30", "10-50", "20-40");
|
|
||||||
addStep("Trough", "4-8", "15-30", "30-70", "40-60");
|
|
||||||
addStep("Trough", "4-8", "15-30", "50-90", "60-80");
|
|
||||||
addStep("Trough", "4-8", "15-30", "70-100", "80-100");
|
|
||||||
} else if (template === "templateShattered") {
|
|
||||||
addStep("Hill", "8", "35-40", "15-85", "30-70");
|
|
||||||
addStep("Trough", "10-20", "40-50", "5-95", "5-95");
|
|
||||||
addStep("Range", "5-7", "30-40", "10-90", "20-80");
|
|
||||||
addStep("Pit", "12-20", "30-40", "15-85", "20-80");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -122,9 +122,10 @@ function restoreLayers() {
|
||||||
if (layerIsOn("toggleIce")) drawIce();
|
if (layerIsOn("toggleIce")) drawIce();
|
||||||
if (layerIsOn("toggleEmblems")) drawEmblems();
|
if (layerIsOn("toggleEmblems")) drawEmblems();
|
||||||
|
|
||||||
// states are getting rendered each time, if it's not required than layers should be hidden
|
// some layers are rendered each time, remove them if they are not on
|
||||||
if (!layerIsOn("toggleBorders")) $("#borders").fadeOut();
|
if (!layerIsOn("toggleBorders")) borders.selectAll("path").remove();
|
||||||
if (!layerIsOn("toggleStates")) regions.style("display", "none").selectAll("path").remove();
|
if (!layerIsOn("toggleStates")) regions.selectAll("path").remove();
|
||||||
|
if (!layerIsOn("toggleRivers")) rivers.selectAll("*").remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleHeight(event) {
|
function toggleHeight(event) {
|
||||||
|
|
@ -1034,13 +1035,14 @@ function drawBorders() {
|
||||||
TIME && console.time("drawBorders");
|
TIME && console.time("drawBorders");
|
||||||
borders.selectAll("path").remove();
|
borders.selectAll("path").remove();
|
||||||
|
|
||||||
const cells = pack.cells,
|
const {cells, vertices} = pack;
|
||||||
vertices = pack.vertices,
|
const n = cells.i.length;
|
||||||
n = cells.i.length;
|
|
||||||
const sPath = [],
|
const sPath = [];
|
||||||
pPath = [];
|
const pPath = [];
|
||||||
const sUsed = new Array(pack.states.length).fill("").map(a => []);
|
|
||||||
const pUsed = new Array(pack.provinces.length).fill("").map(a => []);
|
const sUsed = new Array(pack.states.length).fill("").map(_ => []);
|
||||||
|
const pUsed = new Array(pack.provinces.length).fill("").map(_ => []);
|
||||||
|
|
||||||
for (let i = 0; i < cells.i.length; i++) {
|
for (let i = 0; i < cells.i.length; i++) {
|
||||||
if (!cells.state[i]) continue;
|
if (!cells.state[i]) continue;
|
||||||
|
|
|
||||||
|
|
@ -541,17 +541,18 @@ function randomizeOptions() {
|
||||||
// select heightmap template pseudo-randomly
|
// select heightmap template pseudo-randomly
|
||||||
function randomizeHeightmapTemplate() {
|
function randomizeHeightmapTemplate() {
|
||||||
const templates = {
|
const templates = {
|
||||||
Volcano: 3,
|
volcano: 3,
|
||||||
"High Island": 22,
|
highIsland: 22,
|
||||||
"Low Island": 9,
|
lowIsland: 9,
|
||||||
Continents: 20,
|
continents: 19,
|
||||||
Archipelago: 25,
|
archipelago: 23,
|
||||||
Mediterranean: 3,
|
mediterranean: 5,
|
||||||
Peninsula: 3,
|
peninsula: 3,
|
||||||
Pangea: 5,
|
pangea: 5,
|
||||||
Isthmus: 2,
|
isthmus: 2,
|
||||||
Atoll: 1,
|
atoll: 1,
|
||||||
Shattered: 7
|
shattered: 7,
|
||||||
|
taklamakan: 1
|
||||||
};
|
};
|
||||||
document.getElementById("templateInput").value = rw(templates);
|
document.getElementById("templateInput").value = rw(templates);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue