fix: fix map gen again

This commit is contained in:
hyper 2026-04-13 20:06:18 +08:00
parent c30db2f8a4
commit 1e5e4e9f7e
1 changed files with 16 additions and 34 deletions

View File

@ -272,26 +272,17 @@ function connectWildToWild(
function connectWildToSettlement( function connectWildToSettlement(
wildLayer: MapLayer, wildLayer: MapLayer,
settlementLayer: MapLayer, settlementLayer: MapLayer,
rng: RNG _rng: RNG
): void { ): void {
// Non-crossing connection pattern: each wild connects to 2 adjacent settlements. // Non-crossing connection pattern: each wild connects to 2 adjacent settlements.
// Base pattern: w[0]→{s[0],s[1]}, w[1]→{s[1],s[2]}, w[2]→{s[2],s[3]} // Pattern: w[0]→{s[0],s[1]}, w[1]→{s[1],s[2]}, w[2]→{s[2],s[3]}
// This creates a "chain" where middle settlements are shared. // This creates a "chain" where middle settlements are shared.
// // This pattern guarantees no crossings because target indices are always
// Variation: randomly flip to reverse pattern w[0]→{s[2],s[3]}, w[1]→{s[1],s[2]}, w[2]→{s[0],s[1]} // non-decreasing when sorted by source indices.
// Both patterns guarantee no crossings.
const reverse = rng.next() < 0.5;
if (reverse) {
wildLayer.nodes[0].childIds = [settlementLayer.nodeIds[2], settlementLayer.nodeIds[3]];
wildLayer.nodes[1].childIds = [settlementLayer.nodeIds[1], settlementLayer.nodeIds[2]];
wildLayer.nodes[2].childIds = [settlementLayer.nodeIds[0], settlementLayer.nodeIds[1]];
} else {
wildLayer.nodes[0].childIds = [settlementLayer.nodeIds[0], settlementLayer.nodeIds[1]]; wildLayer.nodes[0].childIds = [settlementLayer.nodeIds[0], settlementLayer.nodeIds[1]];
wildLayer.nodes[1].childIds = [settlementLayer.nodeIds[1], settlementLayer.nodeIds[2]]; wildLayer.nodes[1].childIds = [settlementLayer.nodeIds[1], settlementLayer.nodeIds[2]];
wildLayer.nodes[2].childIds = [settlementLayer.nodeIds[2], settlementLayer.nodeIds[3]]; wildLayer.nodes[2].childIds = [settlementLayer.nodeIds[2], settlementLayer.nodeIds[3]];
}
} }
/** /**
@ -306,25 +297,16 @@ function connectWildToSettlement(
function connectSettlementToWild( function connectSettlementToWild(
settlementLayer: MapLayer, settlementLayer: MapLayer,
wildLayer: MapLayer, wildLayer: MapLayer,
rng: RNG _rng: RNG
): void { ): void {
// Non-crossing pattern: s0→w0, s1→w0,w1, s2→w1,w2, s3→w2 // Non-crossing pattern: s0→w0, s1→w0,w1, s2→w1,w2, s3→w2
// Variation: randomly flip to reverse pattern s0→w2, s1→w1,w2, s2→w0,w1, s3→w0 // This pattern guarantees no crossings because when edges are sorted by
// Both patterns guarantee no crossings. // source index, the minimum target index is non-decreasing.
const reverse = rng.next() < 0.5;
if (reverse) {
settlementLayer.nodes[0].childIds = [wildLayer.nodeIds[2]];
settlementLayer.nodes[1].childIds = [wildLayer.nodeIds[1], wildLayer.nodeIds[2]];
settlementLayer.nodes[2].childIds = [wildLayer.nodeIds[0], wildLayer.nodeIds[1]];
settlementLayer.nodes[3].childIds = [wildLayer.nodeIds[0]];
} else {
settlementLayer.nodes[0].childIds = [wildLayer.nodeIds[0]]; settlementLayer.nodes[0].childIds = [wildLayer.nodeIds[0]];
settlementLayer.nodes[1].childIds = [wildLayer.nodeIds[0], wildLayer.nodeIds[1]]; settlementLayer.nodes[1].childIds = [wildLayer.nodeIds[0], wildLayer.nodeIds[1]];
settlementLayer.nodes[2].childIds = [wildLayer.nodeIds[1], wildLayer.nodeIds[2]]; settlementLayer.nodes[2].childIds = [wildLayer.nodeIds[1], wildLayer.nodeIds[2]];
settlementLayer.nodes[3].childIds = [wildLayer.nodeIds[2]]; settlementLayer.nodes[3].childIds = [wildLayer.nodeIds[2]];
}
} }
/** /**