mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2025-12-22 12:01:23 +01:00
Implement some logic to ignore state being locked when regenerating provinces directly.
This commit is contained in:
parent
2053a7d530
commit
a1621d52c2
2 changed files with 17 additions and 7 deletions
|
|
@ -1332,7 +1332,10 @@ window.BurgsAndStates = (function () {
|
||||||
return adjName ? `${getAdjective(s.name)} ${s.formName}` : `${s.formName} of ${s.name}`;
|
return adjName ? `${getAdjective(s.name)} ${s.formName}` : `${s.formName} of ${s.name}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
const generateProvinces = function (regenerate) {
|
const generateProvinces = function (
|
||||||
|
regenerate = false,
|
||||||
|
ignoreLockedStates = false
|
||||||
|
) {
|
||||||
TIME && console.time("generateProvinces");
|
TIME && console.time("generateProvinces");
|
||||||
const localSeed = regenerate ? generateSeed() : seed;
|
const localSeed = regenerate ? generateSeed() : seed;
|
||||||
Math.random = aleaPRNG(localSeed);
|
Math.random = aleaPRNG(localSeed);
|
||||||
|
|
@ -1372,7 +1375,7 @@ window.BurgsAndStates = (function () {
|
||||||
states.forEach(s => {
|
states.forEach(s => {
|
||||||
s.provinces = s.provinces ? s.provinces.filter(p => p.lock) : [];
|
s.provinces = s.provinces ? s.provinces.filter(p => p.lock) : [];
|
||||||
// Don't regenerate provinces of a locked state
|
// Don't regenerate provinces of a locked state
|
||||||
if (s.lock) return;
|
if (!ignoreLockedStates && s.lock) return;
|
||||||
|
|
||||||
if (!s.i || s.removed) return;
|
if (!s.i || s.removed) return;
|
||||||
const stateBurgs = burgs
|
const stateBurgs = burgs
|
||||||
|
|
@ -1448,6 +1451,10 @@ window.BurgsAndStates = (function () {
|
||||||
if (
|
if (
|
||||||
(provinces[cells.province[e]] && provinces[cells.province[e]].lock) ||
|
(provinces[cells.province[e]] && provinces[cells.province[e]].lock) ||
|
||||||
(
|
(
|
||||||
|
// For finding if the state is locked, first make sure we care about that
|
||||||
|
// then find the province, the state for the province, and if both are defined,
|
||||||
|
// check the lock.
|
||||||
|
!ignoreLockedStates &&
|
||||||
provinces[cells.province[e]] &&
|
provinces[cells.province[e]] &&
|
||||||
states[provinces[cells.province[e]].state] &&
|
states[provinces[cells.province[e]].state] &&
|
||||||
states[provinces[cells.province[e]].state].lock
|
states[provinces[cells.province[e]].state].lock
|
||||||
|
|
@ -1472,12 +1479,15 @@ window.BurgsAndStates = (function () {
|
||||||
// justify provinces shapes a bit
|
// justify provinces shapes a bit
|
||||||
for (const i of cells.i) {
|
for (const i of cells.i) {
|
||||||
if (cells.burg[i]) continue; // do not overwrite burgs
|
if (cells.burg[i]) continue; // do not overwrite burgs
|
||||||
// Do not process any locked provinces or states
|
// Do not process any locked provinces or states, if we care about the latter
|
||||||
if (pack.provinces[cells.province[i]].lock || pack.states[cells.state[i]].lock) continue;
|
if (
|
||||||
|
pack.provinces[cells.province[i]].lock ||
|
||||||
|
(!ignoreLockedStates && pack.states[cells.state[i]].lock)
|
||||||
|
) continue;
|
||||||
// Find neighbors, but ignore any cells from locked states or provinces
|
// Find neighbors, but ignore any cells from locked states or provinces
|
||||||
const neibs = cells.c[i].filter(
|
const neibs = cells.c[i].filter(
|
||||||
c =>
|
c =>
|
||||||
!pack.states[cells.state[c]].lock &&
|
(ignoreLockedStates || !pack.states[cells.state[c]].lock) &&
|
||||||
!pack.provinces[cells.province[c]].lock &&
|
!pack.provinces[cells.province[c]].lock &&
|
||||||
cells.state[c] === cells.state[i]
|
cells.state[c] === cells.state[i]
|
||||||
).map(c => cells.province[c]);
|
).map(c => cells.province[c]);
|
||||||
|
|
@ -1494,7 +1504,7 @@ window.BurgsAndStates = (function () {
|
||||||
// add "wild" provinces if some cells don't have a province assigned
|
// add "wild" provinces if some cells don't have a province assigned
|
||||||
const noProvince = Array.from(cells.i).filter(i => cells.state[i] && !cells.province[i]); // cells without province assigned
|
const noProvince = Array.from(cells.i).filter(i => cells.state[i] && !cells.province[i]); // cells without province assigned
|
||||||
states.forEach(s => {
|
states.forEach(s => {
|
||||||
if (!s.provinces.length || s.lock) return;
|
if (!s.provinces.length || (!ignoreLockedStates && s.lock)) return;
|
||||||
|
|
||||||
const coreProvinceNames = s.provinces.map(p => provinces[p]?.name);
|
const coreProvinceNames = s.provinces.map(p => provinces[p]?.name);
|
||||||
const colonyNamePool = [s.name, ...coreProvinceNames].filter(name => name && !/new/i.test(name));
|
const colonyNamePool = [s.name, ...coreProvinceNames].filter(name => name && !/new/i.test(name));
|
||||||
|
|
|
||||||
|
|
@ -163,7 +163,7 @@ function regenerateStates() {
|
||||||
function regenerateProvinces() {
|
function regenerateProvinces() {
|
||||||
unfog();
|
unfog();
|
||||||
|
|
||||||
BurgsAndStates.generateProvinces(true);
|
BurgsAndStates.generateProvinces(true, true);
|
||||||
drawBorders();
|
drawBorders();
|
||||||
if (layerIsOn("toggleProvinces")) drawProvinces();
|
if (layerIsOn("toggleProvinces")) drawProvinces();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue