Fantasy-Map-Generator/src/scripts/generation/pack/generateRoutes.ts
2022-08-07 18:56:05 +03:00

36 lines
1.3 KiB
TypeScript

import {TIME} from "config/logging";
export function generateRoutes(burgs: TBurgs) {
const routeScores = new Uint8Array(n); // cell road power
getRoads(burgs);
// const townRoutes = getTrails();
// const oceanRoutes = getSearoutes();
return routeScores;
}
const getRoads = function (burgs: TBurgs) {
TIME && console.time("generateMainRoads");
const cells = pack.cells;
const isBurg = (burg: TNoBurg | IBurg): burg is IBurg => burg.i > 0;
const capitals = burgs.filter(burg => isBurg(burg) && burg.capital && !burg.removed) as IBurg[];
capitals.sort((a, b) => a.population - b.population);
if (capitals.length < 2) return []; // not enough capitals to build main roads
const routes = []; // array to store path segments
for (const {i, feature, cell: fromCell} of capitals) {
const sameFeatureCapitals = capitals.filter(capital => i !== capital.i && feature === capital.feature);
for (const {cell: toCell} of sameFeatureCapitals) {
const [from, exit] = findLandPath(fromCell, toCell, true);
const segments = restorePath(fromCell, exit, "main", from);
segments.forEach(s => routes.push(s));
}
}
cells.i.forEach(i => (cells.s[i] += cells.road[i] / 2)); // add roads to suitability score
TIME && console.timeEnd("generateMainRoads");
return routes;
};