stable
This commit is contained in:
parent
860471f805
commit
c523bf4380
8 changed files with 76 additions and 26 deletions
39
mapOutput.js
39
mapOutput.js
|
|
@ -96,7 +96,7 @@ function assignMunicipalityPopulations(adminCenters, adminId, fields, settlement
|
|||
}
|
||||
|
||||
|
||||
function promotePrefectureCapitalPopulations(prefectureRegionId, sea, modernCities, markets, adminCenters, fields, seed, minPopulation = 200000) {
|
||||
function promotePrefectureCapitalPopulations(prefectureRegionId, sea, modernCities, markets, adminCenters, fields, seed, minPopulation = 200000, focusedPrefectureMask = null) {
|
||||
if (!prefectureRegionId) return 0;
|
||||
const prefIds = new Set();
|
||||
for (let i = 0; i < prefectureRegionId.length; i++) {
|
||||
|
|
@ -135,6 +135,24 @@ function promotePrefectureCapitalPopulations(prefectureRegionId, sea, modernCiti
|
|||
if (!p || !inside(p.x, p.y)) return -1;
|
||||
return prefectureRegionId[indexOf(p.x, p.y)] ?? -1;
|
||||
}
|
||||
const focusedPrefCounts = new Map();
|
||||
if (focusedPrefectureMask) {
|
||||
for (let i = 0; i < focusedPrefectureMask.length; i++) {
|
||||
if (!focusedPrefectureMask[i] || sea[i]) continue;
|
||||
const prefId = prefectureRegionId[i] ?? -1;
|
||||
if (prefId >= 0) focusedPrefCounts.set(prefId, (focusedPrefCounts.get(prefId) || 0) + 1);
|
||||
}
|
||||
}
|
||||
const focusedPrefId = focusedPrefCounts.size
|
||||
? [...focusedPrefCounts.entries()].sort((a, b) => b[1] - a[1])[0][0]
|
||||
: 0;
|
||||
for (const city of modernCities || []) {
|
||||
if (city.isPrefecturalCapital) {
|
||||
city.isPrefecturalCapital = false;
|
||||
city.rank = city.isRegionalCapital ? "Regional Capital" : city.population >= 200000 ? "Regional City" : "Local City";
|
||||
city.kind = city.rank;
|
||||
}
|
||||
}
|
||||
for (const prefId of [...prefIds].sort((a, b) => a - b)) {
|
||||
const cities = (modernCities || []).filter((p) => prefAt(p) === prefId);
|
||||
let target = cities.slice().sort((a, b) =>
|
||||
|
|
@ -175,10 +193,10 @@ function promotePrefectureCapitalPopulations(prefectureRegionId, sea, modernCiti
|
|||
target.population = promotedPopulation;
|
||||
promoted++;
|
||||
}
|
||||
target.isPrefecturalCapital = true;
|
||||
target.isRegionalCapital = true;
|
||||
target.rank = "Prefectural Capital";
|
||||
target.kind = "Prefectural Capital";
|
||||
target.isPrefecturalCapital = prefId === focusedPrefId;
|
||||
target.rank = target.isPrefecturalCapital ? "Prefectural Capital" : "Regional Capital";
|
||||
target.kind = target.rank;
|
||||
target.labelPriorityBase = Math.max(target.labelPriorityBase || 0, 1150);
|
||||
target.urbanRadius = clamp(6.2 + Math.sqrt(target.population) / 80, 9, 30);
|
||||
target.coreRadius = clamp(2.0 + Math.sqrt(target.population) / 390, 2.4, 6.4);
|
||||
|
|
@ -480,6 +498,17 @@ export function finishMapOutput({
|
|||
center.canonicalSettlementId = best.id;
|
||||
center.canonicalSettlementName = best.name;
|
||||
center.municipalityRootName = best.name;
|
||||
const bestAdmin = adminId?.[indexOf(best.x, best.y)];
|
||||
const canSnapOffice = inside(best.x, best.y) && !sea[indexOf(best.x, best.y)] && (
|
||||
centerAdmin == null || centerAdmin < 0 || bestAdmin == null || bestAdmin < 0 || bestAdmin === centerAdmin
|
||||
);
|
||||
if (canSnapOffice) {
|
||||
center.generatedOfficeX = center.generatedOfficeX ?? center.x;
|
||||
center.generatedOfficeY = center.generatedOfficeY ?? center.y;
|
||||
center.x = best.x;
|
||||
center.y = best.y;
|
||||
center.officeSnappedToSettlement = true;
|
||||
}
|
||||
} else {
|
||||
center.municipalityRootName = center.generatedMunicipalityName;
|
||||
}
|
||||
|
|
@ -513,7 +542,7 @@ export function finishMapOutput({
|
|||
center.municipalityName = candidate;
|
||||
usedAdminNames.add(center.name);
|
||||
}
|
||||
const promotedPrefectureCapitals = promotePrefectureCapitalPopulations(prefectureRegionId, sea, modernCities, markets, adminCenters, nameFields, seed, 220000);
|
||||
const promotedPrefectureCapitals = promotePrefectureCapitalPopulations(prefectureRegionId, sea, modernCities, markets, adminCenters, nameFields, seed, 220000, prefectureMask);
|
||||
assignMunicipalityPopulations(adminCenters, adminId, nameFields, [
|
||||
...modernCities,
|
||||
...markets,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue