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(
wildLayer: MapLayer,
settlementLayer: MapLayer,
rng: RNG
_rng: RNG
): void {
// 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.
//
// Variation: randomly flip to reverse pattern w[0]→{s[2],s[3]}, w[1]→{s[1],s[2]}, w[2]→{s[0],s[1]}
// Both patterns guarantee no crossings.
// This pattern guarantees no crossings because target indices are always
// non-decreasing when sorted by source indices.
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[1].childIds = [settlementLayer.nodeIds[1], settlementLayer.nodeIds[2]];
wildLayer.nodes[2].childIds = [settlementLayer.nodeIds[2], settlementLayer.nodeIds[3]];
}
}
/**
@ -306,25 +297,16 @@ function connectWildToSettlement(
function connectSettlementToWild(
settlementLayer: MapLayer,
wildLayer: MapLayer,
rng: RNG
_rng: RNG
): void {
// 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
// Both patterns guarantee no crossings.
// This pattern guarantees no crossings because when edges are sorted by
// 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[1].childIds = [wildLayer.nodeIds[0], wildLayer.nodeIds[1]];
settlementLayer.nodes[2].childIds = [wildLayer.nodeIds[1], wildLayer.nodeIds[2]];
settlementLayer.nodes[3].childIds = [wildLayer.nodeIds[2]];
}
}
/**