mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2025-12-17 01:41:22 +01:00
fix add river on click
This commit is contained in:
parent
820cb22463
commit
2162c043c9
3 changed files with 63 additions and 67 deletions
|
|
@ -16,7 +16,7 @@
|
|||
let riverNext = 1; // first river id is 1
|
||||
|
||||
const h = alterHeights();
|
||||
prepareLakeData();
|
||||
Lakes.prepareLakeData(h);
|
||||
resolveDepressions(h, 200);
|
||||
drainWater();
|
||||
defineRivers();
|
||||
|
|
@ -26,54 +26,6 @@
|
|||
|
||||
TIME && console.timeEnd("generateRivers");
|
||||
|
||||
function prepareLakeData() {
|
||||
const ELEVATION_LIMIT = 10;
|
||||
|
||||
features.forEach(f => {
|
||||
if (f.type !== "lake") return;
|
||||
delete f.flux;
|
||||
delete f.inlets;
|
||||
delete f.outlet;
|
||||
delete f.height;
|
||||
delete f.closed;
|
||||
!f.shoreline && Lakes.getShoreline(f);
|
||||
|
||||
// lake surface height is as lowest land cells around
|
||||
const min = f.shoreline.sort((a, b) => h[a] - h[b])[0];
|
||||
f.height = h[min] - 0.1;
|
||||
|
||||
// check if lake can be open (not in deep depression)
|
||||
let deep = true;
|
||||
const treshold = f.height + ELEVATION_LIMIT;
|
||||
const queue = [min];
|
||||
const checked = [];
|
||||
checked[min] = true;
|
||||
|
||||
// check if elevated lake can potentially pour to another water body
|
||||
while (deep && queue.length) {
|
||||
const q = queue.pop();
|
||||
|
||||
for (const n of cells.c[q]) {
|
||||
if (checked[n]) continue;
|
||||
if (h[n] >= treshold) continue;
|
||||
|
||||
if (h[n] < 20) {
|
||||
const nFeature = features[cells.f[n]];
|
||||
if (nFeature.type === "ocean" || f.height > nFeature.height) {
|
||||
deep = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
checked[n] = true;
|
||||
queue.push(n);
|
||||
}
|
||||
}
|
||||
|
||||
f.closed = deep;
|
||||
});
|
||||
}
|
||||
|
||||
function drainWater() {
|
||||
const MIN_FLUX_TO_FORM_RIVER = 30;
|
||||
const land = cells.i.filter(i => h[i] >= 20).sort((a, b) => h[b] - h[a]);
|
||||
|
|
@ -223,13 +175,13 @@
|
|||
};
|
||||
|
||||
// add distance to water value to land cells to make map less depressed
|
||||
function alterHeights() {
|
||||
const alterHeights = () => {
|
||||
const cells = pack.cells;
|
||||
return Array.from(cells.h).map((h, i) => {
|
||||
if (h < 20 || cells.t[i] < 1) return h;
|
||||
return h + cells.t[i] / 100 + d3.mean(cells.c[i].map(c => cells.t[c])) / 10000;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// depression filling algorithm (for a correct water flux modeling)
|
||||
const resolveDepressions = function (h, maxIterations) {
|
||||
|
|
@ -426,5 +378,5 @@
|
|||
return getBasin(parent);
|
||||
};
|
||||
|
||||
return {generate, resolveDepressions, addMeandering, getPath, specify, getName, getBasin, remove};
|
||||
return {generate, alterHeights, resolveDepressions, addMeandering, getPath, specify, getName, getBasin, remove};
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue