From 1e5e4e9f7e9f9e4f8f6854a7b21b547001a7fa16 Mon Sep 17 00:00:00 2001 From: hyper Date: Mon, 13 Apr 2026 20:06:18 +0800 Subject: [PATCH] fix: fix map gen again --- .../slay-the-spire-like/map/generator.ts | 50 ++++++------------- 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/src/samples/slay-the-spire-like/map/generator.ts b/src/samples/slay-the-spire-like/map/generator.ts index 8ff8583..015367c 100644 --- a/src/samples/slay-the-spire-like/map/generator.ts +++ b/src/samples/slay-the-spire-like/map/generator.ts @@ -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. - - 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]]; - } + // This pattern guarantees no crossings because target indices are always + // non-decreasing when sorted by source indices. + + 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. - - 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]]; - } + // This pattern guarantees no crossings because when edges are sorted by + // source index, the minimum target index is non-decreasing. + + 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]]; } /**