From 910e782f1fe5b5cfe0e0a53e4b0e9bfa491466e2 Mon Sep 17 00:00:00 2001 From: max Date: Sun, 7 Aug 2022 01:56:02 +0300 Subject: [PATCH] refactor: routes start --- .../generation/pack/burgsAndStates/config.ts | 2 +- .../burgsAndStates/generateBurgsAndStates.ts | 3 -- .../pack/burgsAndStates/specifyBurgs.ts | 3 +- src/scripts/generation/pack/generateRoutes.ts | 36 +++++++++++++++++++ src/scripts/generation/pack/pack.ts | 6 +++- src/types/overrides.d.ts | 1 + src/types/pack/burgs.d.ts | 1 + src/types/pack/pack.d.ts | 1 + 8 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 src/scripts/generation/pack/generateRoutes.ts diff --git a/src/scripts/generation/pack/burgsAndStates/config.ts b/src/scripts/generation/pack/burgsAndStates/config.ts index 2e16c1da..2a198cde 100644 --- a/src/scripts/generation/pack/burgsAndStates/config.ts +++ b/src/scripts/generation/pack/burgsAndStates/config.ts @@ -1,2 +1,2 @@ -export const NO_BURG: TNoBurg = {name: undefined}; +export const NO_BURG: TNoBurg = {i: 0, name: undefined}; export const NEUTRALS: TNeutrals = {i: 0, name: "Neutrals"}; diff --git a/src/scripts/generation/pack/burgsAndStates/generateBurgsAndStates.ts b/src/scripts/generation/pack/burgsAndStates/generateBurgsAndStates.ts index ebdde324..fc1762d3 100644 --- a/src/scripts/generation/pack/burgsAndStates/generateBurgsAndStates.ts +++ b/src/scripts/generation/pack/burgsAndStates/generateBurgsAndStates.ts @@ -44,12 +44,9 @@ export function generateBurgsAndStates( pick(cells, "c", "h", "f", "t", "r", "fl", "s", "biome", "culture") ); - const roadScores = new Uint16Array(cellsNumber); // TODO: define roads - const burgs = specifyBurgs( capitals, towns, - roadScores, stateIds, features, temp, diff --git a/src/scripts/generation/pack/burgsAndStates/specifyBurgs.ts b/src/scripts/generation/pack/burgsAndStates/specifyBurgs.ts index 147d2fb3..290e643d 100644 --- a/src/scripts/generation/pack/burgsAndStates/specifyBurgs.ts +++ b/src/scripts/generation/pack/burgsAndStates/specifyBurgs.ts @@ -18,7 +18,6 @@ type TStatesReturn = ReturnType; export function specifyBurgs( capitals: TCapitals, towns: TTowns, - roadScores: Uint16Array, stateIds: Uint16Array, features: TPackFeatures, temp: Int8Array, @@ -64,7 +63,7 @@ export function specifyBurgs( // get population in points, where 1 point = 1000 people by default function definePopulation(cellId: number, capital: Logical, port: number) { - const basePopulation = (cells.s[cellId] + roadScores[cellId] / 2) / 4; + const basePopulation = cells.s[cellId] / 4; const decimalPart = (cellId % 1000) / 1000; const capitalMultiplier = capital ? 1.3 : 1; diff --git a/src/scripts/generation/pack/generateRoutes.ts b/src/scripts/generation/pack/generateRoutes.ts new file mode 100644 index 00000000..2e4af1eb --- /dev/null +++ b/src/scripts/generation/pack/generateRoutes.ts @@ -0,0 +1,36 @@ +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 paths = []; // array to store path segments + + for (const b of capitals) { + const connect = capitals.filter(c => c.feature === b.feature && c !== b); + for (const t of connect) { + const [from, exit] = findLandPath(b.cell, t.cell, true); + const segments = restorePath(b.cell, exit, "main", from); + segments.forEach(s => paths.push(s)); + } + } + + cells.i.forEach(i => (cells.s[i] += cells.road[i] / 2)); // add roads to suitability score + TIME && console.timeEnd("generateMainRoads"); + return paths; +}; diff --git a/src/scripts/generation/pack/pack.ts b/src/scripts/generation/pack/pack.ts index 039f1dd5..b5ec0a7e 100644 --- a/src/scripts/generation/pack/pack.ts +++ b/src/scripts/generation/pack/pack.ts @@ -12,6 +12,7 @@ import {rn} from "utils/numberUtils"; import {generateCultures, expandCultures} from "./cultures"; import {generateRivers} from "./rivers"; import {generateBurgsAndStates} from "./burgsAndStates/generateBurgsAndStates"; +import {generateRoutes} from "./generateRoutes"; const {LAND_COAST, WATER_COAST, DEEPER_WATER} = DISTANCE_FIELD; const {Biomes} = window; @@ -116,6 +117,8 @@ export function createPack(grid: IGrid): IPack { } ); + const routeScores = generateRoutes(); + // Religions.generate(); // BurgsAndStates.defineStateForms(); // BurgsAndStates.generateProvinces(); @@ -154,7 +157,8 @@ export function createPack(grid: IGrid): IPack { pop: population, culture: cultureIds, burg: burgIds, - state: stateIds + state: stateIds, + road: routeScores // religion, province }, features: mergedFeatures, diff --git a/src/types/overrides.d.ts b/src/types/overrides.d.ts index b4456b68..713029bc 100644 --- a/src/types/overrides.d.ts +++ b/src/types/overrides.d.ts @@ -28,6 +28,7 @@ interface Window { Military: any; Markers: any; COA: any; + Routes: any; } interface Node { diff --git a/src/types/pack/burgs.d.ts b/src/types/pack/burgs.d.ts index 380cb2f8..cc1ba602 100644 --- a/src/types/pack/burgs.d.ts +++ b/src/types/pack/burgs.d.ts @@ -14,6 +14,7 @@ interface IBurg { } type TNoBurg = { + i: 0; name: undefined; }; diff --git a/src/types/pack/pack.d.ts b/src/types/pack/pack.d.ts index e6df795e..1e261486 100644 --- a/src/types/pack/pack.d.ts +++ b/src/types/pack/pack.d.ts @@ -29,6 +29,7 @@ interface IPackCells { burg: UintArray; haven: UintArray; harbor: UintArray; + road: Uint8Array; q: Quadtree; }