start depression fill with lowest cells

This commit is contained in:
Azgaar 2021-06-06 17:27:24 +03:00
parent 1cd9069b15
commit 6cca0b7f38
2 changed files with 10 additions and 5 deletions

View file

@ -599,6 +599,7 @@ function generate() {
markFeatures(); markFeatures();
markupGridOcean(); markupGridOcean();
openNearSeaLakes(); openNearSeaLakes();
OceanLayers(); OceanLayers();
defineMapSize(); defineMapSize();
calculateMapCoordinates(); calculateMapCoordinates();

View file

@ -43,6 +43,10 @@
const land = cells.i.filter(i => h[i] >= 20).sort((a, b) => h[b] - h[a]); const land = cells.i.filter(i => h[i] >= 20).sort((a, b) => h[b] - h[a]);
const lakeOutCells = Lakes.setClimateData(h); const lakeOutCells = Lakes.setClimateData(h);
// const flow = cells.i.length < 65535 ? new Uint16Array(cells.i.length) : new Uint32Array(cells.i.length);
// flow[i] = min;
// debug.append("path").attr("class", "arrow").attr("d", `M${cells.p[i][0]},${cells.p[i][1]}L${cells.p[min][0]},${cells.p[min][1]}`);
land.forEach(function (i) { land.forEach(function (i) {
cells.fl[i] += grid.cells.prec[cells.g[i]]; // flux from precipitation cells.fl[i] += grid.cells.prec[cells.g[i]]; // flux from precipitation
const [x, y] = p[i]; const [x, y] = p[i];
@ -194,12 +198,13 @@
const lakes = features.filter(f => f.type === "lake"); const lakes = features.filter(f => f.type === "lake");
const land = cells.i.filter(i => h[i] >= 20 && !cells.b[i]); // exclude near-border cells const land = cells.i.filter(i => h[i] >= 20 && !cells.b[i]); // exclude near-border cells
land.sort((a, b) => h[b] - h[a]); // highest cells go first land.sort((a, b) => h[a] - h[b]); // lowest cells go first
const progress = []; const progress = [];
let depressions = Infinity; let depressions = Infinity;
let prevDepressions = null; let prevDepressions = null;
for (let iteration = 0; depressions && iteration < maxIterations; iteration++) { let iteration = 0;
for (; depressions && iteration < maxIterations; iteration++) {
if (progress.length > 5 && d3.sum(progress) > 0) { if (progress.length > 5 && d3.sum(progress) > 0) {
// bad progress, abort and set heights back // bad progress, abort and set heights back
h = alterHeights(); h = alterHeights();
@ -239,11 +244,10 @@
prevDepressions = depressions; prevDepressions = depressions;
} }
console.log(iteration);
if (!depressions) return; if (!depressions) return;
WARN && console.warn(`Unresolved depressions: ${depressions}. Edit heightmap to fix`); WARN && console.warn(`Unresolved depressions: ${depressions}. Edit heightmap to fix`);
//const flow = cells.i.length < 65535 ? new Uint16Array(cells.i.length) : new Uint32Array(cells.i.length);
//flow[i] = min;
//debug.append("path").attr("class", "arrow").attr("d", `M${cells.p[i][0]},${cells.p[i][1]}L${cells.p[min][0]},${cells.p[min][1]}`);
}; };
// add more river points on 1/3 and 2/3 of length // add more river points on 1/3 and 2/3 of length