refactor: routes start

This commit is contained in:
max 2022-08-07 01:56:02 +03:00
parent 8c741a559e
commit 910e782f1f
8 changed files with 46 additions and 7 deletions

View file

@ -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"}; export const NEUTRALS: TNeutrals = {i: 0, name: "Neutrals"};

View file

@ -44,12 +44,9 @@ export function generateBurgsAndStates(
pick(cells, "c", "h", "f", "t", "r", "fl", "s", "biome", "culture") pick(cells, "c", "h", "f", "t", "r", "fl", "s", "biome", "culture")
); );
const roadScores = new Uint16Array(cellsNumber); // TODO: define roads
const burgs = specifyBurgs( const burgs = specifyBurgs(
capitals, capitals,
towns, towns,
roadScores,
stateIds, stateIds,
features, features,
temp, temp,

View file

@ -18,7 +18,6 @@ type TStatesReturn = ReturnType<typeof createStates>;
export function specifyBurgs( export function specifyBurgs(
capitals: TCapitals, capitals: TCapitals,
towns: TTowns, towns: TTowns,
roadScores: Uint16Array,
stateIds: Uint16Array, stateIds: Uint16Array,
features: TPackFeatures, features: TPackFeatures,
temp: Int8Array, temp: Int8Array,
@ -64,7 +63,7 @@ export function specifyBurgs(
// get population in points, where 1 point = 1000 people by default // get population in points, where 1 point = 1000 people by default
function definePopulation(cellId: number, capital: Logical, port: number) { 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 decimalPart = (cellId % 1000) / 1000;
const capitalMultiplier = capital ? 1.3 : 1; const capitalMultiplier = capital ? 1.3 : 1;

View file

@ -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;
};

View file

@ -12,6 +12,7 @@ import {rn} from "utils/numberUtils";
import {generateCultures, expandCultures} from "./cultures"; import {generateCultures, expandCultures} from "./cultures";
import {generateRivers} from "./rivers"; import {generateRivers} from "./rivers";
import {generateBurgsAndStates} from "./burgsAndStates/generateBurgsAndStates"; import {generateBurgsAndStates} from "./burgsAndStates/generateBurgsAndStates";
import {generateRoutes} from "./generateRoutes";
const {LAND_COAST, WATER_COAST, DEEPER_WATER} = DISTANCE_FIELD; const {LAND_COAST, WATER_COAST, DEEPER_WATER} = DISTANCE_FIELD;
const {Biomes} = window; const {Biomes} = window;
@ -116,6 +117,8 @@ export function createPack(grid: IGrid): IPack {
} }
); );
const routeScores = generateRoutes();
// Religions.generate(); // Religions.generate();
// BurgsAndStates.defineStateForms(); // BurgsAndStates.defineStateForms();
// BurgsAndStates.generateProvinces(); // BurgsAndStates.generateProvinces();
@ -154,7 +157,8 @@ export function createPack(grid: IGrid): IPack {
pop: population, pop: population,
culture: cultureIds, culture: cultureIds,
burg: burgIds, burg: burgIds,
state: stateIds state: stateIds,
road: routeScores
// religion, province // religion, province
}, },
features: mergedFeatures, features: mergedFeatures,

View file

@ -28,6 +28,7 @@ interface Window {
Military: any; Military: any;
Markers: any; Markers: any;
COA: any; COA: any;
Routes: any;
} }
interface Node { interface Node {

View file

@ -14,6 +14,7 @@ interface IBurg {
} }
type TNoBurg = { type TNoBurg = {
i: 0;
name: undefined; name: undefined;
}; };

View file

@ -29,6 +29,7 @@ interface IPackCells {
burg: UintArray; burg: UintArray;
haven: UintArray; haven: UintArray;
harbor: UintArray; harbor: UintArray;
road: Uint8Array;
q: Quadtree; q: Quadtree;
} }