From 7625d048073d7ab4a485327416636b03e7f16400 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Sun, 3 Sep 2017 13:11:53 +0300 Subject: [PATCH] Fixed exceptions during level generation if two tunnel nodes happen to be placed at the same position --- Barotrauma/BarotraumaShared/Source/Map/Levels/Level.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Map/Levels/Level.cs b/Barotrauma/BarotraumaShared/Source/Map/Levels/Level.cs index 4a3d45a50..9ec3fd5e9 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Levels/Level.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Levels/Level.cs @@ -752,11 +752,16 @@ namespace Barotrauma while (currLength < tunnelLength) { Vector2 dir = Rand.Vector(1.0f, Rand.RandSync.Server); - + dir.Y += Math.Sign(tunnelNodes[tunnelNodes.Count - 1].Y - Size.Y / 2) * 0.5f; if (tunnelNodes.Count > 1) { - dir += Vector2.Normalize(tunnelNodes[tunnelNodes.Count - 1] - tunnelNodes[tunnelNodes.Count - 2]) * 0.5f; + //keep heading roughly in the same direction as the previous nodes + Vector2 prevNodeDiff = tunnelNodes[tunnelNodes.Count - 1] - tunnelNodes[tunnelNodes.Count - 2]; + if (prevNodeDiff != Vector2.Zero) + { + dir += Vector2.Normalize(tunnelNodes[tunnelNodes.Count - 1] - tunnelNodes[tunnelNodes.Count - 2]) * 0.5f; + } } float avoidDist = 20000.0f;