mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2025-12-17 17:51:24 +01:00
refactor: lake group detection and features rendering
This commit is contained in:
parent
4a15dc3243
commit
4b874246e3
10 changed files with 52 additions and 60 deletions
|
|
@ -5,8 +5,6 @@ import {closeDialogs} from "dialogs/utils";
|
|||
import {openDialog} from "dialogs";
|
||||
import {initLayers, renderLayer, restoreLayers} from "layers";
|
||||
// @ts-expect-error js module
|
||||
import {drawCoastline} from "layers/renderers/drawCoastline";
|
||||
// @ts-expect-error js module
|
||||
import {drawScaleBar, Rulers} from "modules/measurers";
|
||||
// @ts-expect-error js module
|
||||
import {unfog} from "modules/ui/editors";
|
||||
|
|
@ -63,7 +61,7 @@ async function generate(options?: IGenerationOptions) {
|
|||
|
||||
// temp rendering for debug
|
||||
renderLayer("cells");
|
||||
renderLayer("coastline", pack.vertices, pack.features);
|
||||
renderLayer("features");
|
||||
renderLayer("heightmap");
|
||||
renderLayer("rivers", pack);
|
||||
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ export const getClimateData = function (
|
|||
return lakeData;
|
||||
};
|
||||
|
||||
export const mergeLakeData = function (
|
||||
export const mergeLakeDataToFeatures = function (
|
||||
features: TPackFeatures,
|
||||
lakeData: ILakeClimateData[],
|
||||
rivers: Pick<IRiver, "i">[]
|
||||
|
|
@ -57,11 +57,12 @@ export const mergeLakeData = function (
|
|||
const lake = lakeData.find(lake => lake.i === feature.i);
|
||||
if (!lake) return feature;
|
||||
|
||||
const {flux, temp, evaporation} = lake;
|
||||
const {firstCell, height, flux, temp, evaporation} = lake;
|
||||
const inlets = lake.inlets?.filter(inlet => rivers.find(river => river.i === inlet));
|
||||
const outlet = rivers.find(river => river.i === lake.outlet)?.i;
|
||||
const group = defineLakeGroup({firstCell, height, flux, temp, evaporation, inlets, outlet});
|
||||
|
||||
const lakeFeature: IPackFeatureLake = {...feature, flux, temp, evaporation, inlets, outlet};
|
||||
const lakeFeature: IPackFeatureLake = {...feature, flux, temp, evaporation, inlets, outlet, group};
|
||||
if (!inlets || !inlets.length) delete lakeFeature.inlets;
|
||||
if (!outlet) delete lakeFeature.outlet;
|
||||
|
||||
|
|
@ -70,3 +71,33 @@ export const mergeLakeData = function (
|
|||
|
||||
return updatedFeatures as TPackFeatures;
|
||||
};
|
||||
|
||||
function defineLakeGroup({
|
||||
firstCell,
|
||||
height,
|
||||
flux,
|
||||
temp,
|
||||
evaporation,
|
||||
inlets,
|
||||
outlet
|
||||
}: {
|
||||
firstCell: number;
|
||||
height: number;
|
||||
flux: number;
|
||||
temp: number;
|
||||
evaporation: number;
|
||||
inlets?: number[];
|
||||
outlet?: number;
|
||||
}): IPackFeatureLake["group"] {
|
||||
if (temp < -3) return "frozen";
|
||||
if (height > 60 && cells < 10 && firstCell % 10 === 0) return "lava";
|
||||
|
||||
if ((!inlets || !inlets.length) && !outlet) {
|
||||
if (evaporation > flux * 4) return "dry";
|
||||
if (cells < 3 && firstCell % 10 === 0) return "sinkhole";
|
||||
}
|
||||
|
||||
if (!outlet && evaporation > flux) return "salt";
|
||||
|
||||
return "freshwater";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
import * as d3 from "d3";
|
||||
|
||||
// @ts-expect-error js module
|
||||
import {drawCoastline} from "layers/renderers/drawCoastline";
|
||||
import {markupPackFeatures} from "modules/markup";
|
||||
// @ts-expect-error js module
|
||||
import {drawScaleBar} from "modules/measurers";
|
||||
|
|
@ -22,17 +20,19 @@ const {LAND_COAST, WATER_COAST, DEEPER_WATER} = DISTANCE_FIELD;
|
|||
export function createPack(grid: IGrid): IPack {
|
||||
const {vertices, cells} = repackGrid(grid);
|
||||
|
||||
const markup = markupPackFeatures(grid, vertices, pick(cells, "v", "c", "b", "p", "h"));
|
||||
const {features, featureIds, distanceField, haven, harbor} = markup;
|
||||
const {features, featureIds, distanceField, haven, harbor} = markupPackFeatures(
|
||||
grid,
|
||||
vertices,
|
||||
pick(cells, "v", "c", "b", "p", "h")
|
||||
);
|
||||
|
||||
const {heights, flux, r, conf, rivers, mergedFeatures} = generateRivers(
|
||||
grid.cells.prec,
|
||||
grid.cells.temp,
|
||||
pick({...cells, f: featureIds, t: distanceField, haven}, "i", "c", "b", "g", "t", "h", "f", "haven", "p"),
|
||||
{...pick(cells, "i", "c", "b", "g", "h", "p"), f: featureIds, t: distanceField, haven},
|
||||
features
|
||||
);
|
||||
|
||||
// Lakes.defineGroup(newPack);
|
||||
// Biomes.define(newPack, grid);
|
||||
|
||||
// const rankCellsData = pick(newPack.cells, "i", "f", "fl", "conf", "r", "h", "area", "biome", "haven", "harbor");
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import {DISTANCE_FIELD, MAX_HEIGHT, MIN_LAND_HEIGHT} from "config/generation";
|
|||
import {getInputNumber} from "utils/nodeUtils";
|
||||
import {pick} from "utils/functionUtils";
|
||||
import {byId} from "utils/shorthands";
|
||||
import {mergeLakeData, getClimateData, ILakeClimateData} from "./lakes";
|
||||
import {mergeLakeDataToFeatures, getClimateData, ILakeClimateData} from "./lakes";
|
||||
import {drawArrow} from "utils/debugUtils";
|
||||
|
||||
const {Rivers} = window;
|
||||
|
|
@ -44,7 +44,7 @@ export function generateRivers(
|
|||
const {r, conf, rivers} = defineRivers();
|
||||
const heights = downcutRivers(currentCellHeights);
|
||||
|
||||
const mergedFeatures = mergeLakeData(features, lakeData, rivers);
|
||||
const mergedFeatures = mergeLakeDataToFeatures(features, lakeData, rivers);
|
||||
|
||||
TIME && console.timeEnd("generateRivers");
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue