From 7cb88e39e961b23aaf44ff7be343f7a546d4b55b Mon Sep 17 00:00:00 2001 From: Regalis Date: Wed, 5 Apr 2017 21:36:31 +0300 Subject: [PATCH] Attempt to fix ThrowOrIgnoreBadComparer exception in LightSource.FindRaycastHits. Couldn't reproduce the crash, but I'm guessing it could be caused by CompareCCW not returning 0 if comparing a position to itself. (and if not, at least the exception is caught now) --- Subsurface/Source/Map/Lights/LightSource.cs | 14 +++++++++++++- Subsurface/Source/Utils/MathUtils.cs | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Subsurface/Source/Map/Lights/LightSource.cs b/Subsurface/Source/Map/Lights/LightSource.cs index bc2363e7c..0aeeada4e 100644 --- a/Subsurface/Source/Map/Lights/LightSource.cs +++ b/Subsurface/Source/Map/Lights/LightSource.cs @@ -352,7 +352,19 @@ namespace Barotrauma.Lights points.AddRange(boundaryCorners); var compareCCW = new CompareSegmentPointCW(drawPos); - points.Sort(compareCCW); + try + { + points.Sort(compareCCW); + } + catch (Exception e) + { + StringBuilder sb = new StringBuilder("Constructing light volumes failed! Light pos: "+drawPos+", Hull verts:\n"); + foreach (SegmentPoint sp in points) + { + sb.AppendLine(sp.Pos.ToString()); + } + DebugConsole.ThrowError(sb.ToString(), e); + } List output = new List(); diff --git a/Subsurface/Source/Utils/MathUtils.cs b/Subsurface/Source/Utils/MathUtils.cs index 62f11fab1..30d09ee5d 100644 --- a/Subsurface/Source/Utils/MathUtils.cs +++ b/Subsurface/Source/Utils/MathUtils.cs @@ -512,6 +512,7 @@ namespace Barotrauma public static int Compare(Vector2 a, Vector2 b, Vector2 center) { + if (a == b) return 0; if (a.X - center.X >= 0 && b.X - center.X < 0) return -1; if (a.X - center.X < 0 && b.X - center.X >= 0) return 1; if (a.X - center.X == 0 && b.X - center.X == 0)