From b29004880b7284370fa8ddaa020a1927e35b9b4d Mon Sep 17 00:00:00 2001
From: MaxED <j.maxed@gmail.com>
Date: Tue, 23 Feb 2016 07:39:34 +0000
Subject: [PATCH] Fixed, DB2 bug, Visual mode: in some cases (sidedef's sector
 ceiling lower than other side's sector floor) higher/lower sidedef picking
 was behaving incorrectly.

---
 Source/Plugins/BuilderModes/VisualModes/VisualLower.cs | 3 ++-
 Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualLower.cs b/Source/Plugins/BuilderModes/VisualModes/VisualLower.cs
index ee7410b00..f21b4f684 100644
--- a/Source/Plugins/BuilderModes/VisualModes/VisualLower.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/VisualLower.cs
@@ -190,7 +190,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			if(polygons.Count > 0)
 			{
 				// Keep top and bottom planes for intersection testing
-				top = osd.Floor.plane;
+				Vector2D linecenter = Sidedef.Line.GetCenterPoint(); //mxd. Our sector's ceiling can be lower than the other sector's floor!
+				top = (osd.Floor.plane.GetZ(linecenter) < sd.Ceiling.plane.GetZ(linecenter) ? osd.Floor.plane : sd.Ceiling.plane);
 				bottom = sd.Floor.plane;
 				
 				// Process the polygon and create vertices
diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs b/Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs
index f9f230612..4fa4b514b 100644
--- a/Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs
@@ -184,8 +184,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			if(polygons.Count > 0)
 			{
 				// Keep top and bottom planes for intersection testing
+				Vector2D linecenter = Sidedef.Line.GetCenterPoint(); //mxd. Our sector's floor can be higher than the other sector's ceiling!
 				top = sd.Ceiling.plane;
-				bottom = osd.Ceiling.plane;
+				bottom = (osd.Ceiling.plane.GetZ(linecenter) > sd.Floor.plane.GetZ(linecenter) ? osd.Ceiling.plane : sd.Floor.plane);
 				
 				// Process the polygon and create vertices
 				List<WorldVertex> verts = CreatePolygonVertices(polygons, tp, sd, lightvalue, lightabsolute);
-- 
GitLab