From 12f32e2bc60d1d6316d4d88d144833ad38db3807 Mon Sep 17 00:00:00 2001
From: biwa <6475593+biwa@users.noreply.github.com>
Date: Tue, 28 Dec 2021 11:21:37 +0100
Subject: [PATCH] UDBScript: fixed a bug where Map.nearestLinedef,
 Map.nearestThing, Map.nearestVertex, and Map.nearestSidedef would not return
 valid objects when no nearest map element was found

---
 Source/Plugins/UDBScript/API/MapWrapper.cs | 36 +++++++++++++++++-----
 1 file changed, 29 insertions(+), 7 deletions(-)

diff --git a/Source/Plugins/UDBScript/API/MapWrapper.cs b/Source/Plugins/UDBScript/API/MapWrapper.cs
index 5b574fe87..e1e432ddf 100644
--- a/Source/Plugins/UDBScript/API/MapWrapper.cs
+++ b/Source/Plugins/UDBScript/API/MapWrapper.cs
@@ -263,11 +263,17 @@ namespace CodeImp.DoomBuilder.UDBScript.Wrapper
 			try
 			{
 				Vector2D v = (Vector2D)BuilderPlug.Me.GetVectorFromObject(pos, false);
+				Linedef nearest = null;
 
 				if (double.IsNaN(maxrange))
-					return new LinedefWrapper(General.Map.Map.NearestLinedef(v));
+					nearest = General.Map.Map.NearestLinedef(v);
 				else
-					return new LinedefWrapper(General.Map.Map.NearestLinedefRange(v, maxrange));
+					nearest = General.Map.Map.NearestLinedefRange(v, maxrange);
+
+				if (nearest == null)
+					return null;
+
+				return new LinedefWrapper(nearest);
 			}
 			catch (CantConvertToVectorException e)
 			{
@@ -286,11 +292,17 @@ namespace CodeImp.DoomBuilder.UDBScript.Wrapper
 			try
 			{
 				Vector2D v = (Vector2D)BuilderPlug.Me.GetVectorFromObject(pos, false);
+				Thing nearest = null;
 
 				if (double.IsNaN(maxrange))
-					return new ThingWrapper(General.Map.Map.NearestThingSquareRange(v, double.MaxValue));
+					nearest = General.Map.Map.NearestThingSquareRange(v, double.MaxValue);
 				else
-					return new ThingWrapper(General.Map.Map.NearestThingSquareRange(v, maxrange));
+					nearest = General.Map.Map.NearestThingSquareRange(v, maxrange);
+
+				if (nearest == null)
+					return null;
+
+				return new ThingWrapper(nearest);
 			}
 			catch (CantConvertToVectorException e)
 			{
@@ -309,11 +321,17 @@ namespace CodeImp.DoomBuilder.UDBScript.Wrapper
 			try
 			{
 				Vector2D v = (Vector2D)BuilderPlug.Me.GetVectorFromObject(pos, false);
+				Vertex nearest = null;
 
 				if (double.IsNaN(maxrange))
-					return new VertexWrapper(General.Map.Map.NearestVertexSquareRange(v, double.MaxValue));
+					nearest = General.Map.Map.NearestVertexSquareRange(v, double.MaxValue);
 				else
-					return new VertexWrapper(General.Map.Map.NearestVertexSquareRange(v, maxrange));
+					nearest = General.Map.Map.NearestVertexSquareRange(v, maxrange);
+
+				if (nearest == null)
+					return null;
+
+				return new VertexWrapper(nearest);
 			}
 			catch (CantConvertToVectorException e)
 			{
@@ -332,8 +350,12 @@ namespace CodeImp.DoomBuilder.UDBScript.Wrapper
 			try
 			{
 				Vector2D v = (Vector2D)BuilderPlug.Me.GetVectorFromObject(pos, false);
+				Sidedef nearest = MapSet.NearestSidedef(General.Map.Map.Sidedefs, v);
+
+				if (nearest == null)
+					return null;
 
-				return new SidedefWrapper(MapSet.NearestSidedef(General.Map.Map.Sidedefs, v));
+				return new SidedefWrapper(nearest);
 			}
 			catch (CantConvertToVectorException e)
 			{
-- 
GitLab