From 1b26fa35f128a4d7f7af76f3eab0ceff888f7b80 Mon Sep 17 00:00:00 2001
From: MaxED <j.maxed@gmail.com>
Date: Mon, 10 Aug 2015 18:31:27 +0000
Subject: [PATCH] Fixed, Things mode, curved event lines: in some cases
 IsCurved property was not applied to all InterpolationPoints in a path.

---
 Source/Core/GZBuilder/Data/LinksCollector.cs | 37 ++++++++++++++------
 1 file changed, 26 insertions(+), 11 deletions(-)

diff --git a/Source/Core/GZBuilder/Data/LinksCollector.cs b/Source/Core/GZBuilder/Data/LinksCollector.cs
index f6c3768aa..e62b1a893 100644
--- a/Source/Core/GZBuilder/Data/LinksCollector.cs
+++ b/Source/Core/GZBuilder/Data/LinksCollector.cs
@@ -53,6 +53,23 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data
 				nextnodes = new Dictionary<int, PathNode>();
 				prevnodes = new Dictionary<int, PathNode>();
 			}
+
+			internal void PropagateCurvedFlag()
+			{
+				if(!IsCurved) return;
+				foreach(PathNode node in nextnodes.Values)
+				{
+					if(node.IsCurved) continue;
+					node.IsCurved = true;
+					node.PropagateCurvedFlag();
+				}
+				foreach(PathNode node in prevnodes.Values)
+				{
+					if(node.IsCurved) continue;
+					node.IsCurved = true;
+					node.PropagateCurvedFlag();
+				}
+			}
 		}
 		
 		public static List<Line3D> GetThingLinks(IEnumerable<VisualThing> visualthings) 
@@ -296,21 +313,19 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data
 					foreach(PathNode targetnode in result.InterpolationPoints[targettag])
 					{
 						// Connect both ways
-						if(!node.NextNodes.ContainsKey(targetnode.Thing.Index))
-						{
-							node.NextNodes.Add(targetnode.Thing.Index, targetnode);
-							if(targetnode.IsCurved) node.IsCurved = true;
-						}
-						if(!targetnode.PreviousNodes.ContainsKey(node.Thing.Index))
-						{
-							targetnode.PreviousNodes.Add(node.Thing.Index, node);
-							if(node.IsCurved) targetnode.IsCurved = true;
-						}
+						if(!node.NextNodes.ContainsKey(targetnode.Thing.Index)) node.NextNodes.Add(targetnode.Thing.Index, targetnode);
+						if(!targetnode.PreviousNodes.ContainsKey(node.Thing.Index)) targetnode.PreviousNodes.Add(node.Thing.Index, node);
 					}
 				}
 			}
 
-			// 2. Make lines
+			// 2. Propagate IsCurved flag
+			foreach(KeyValuePair<int, List<PathNode>> group in result.InterpolationPoints)
+			{
+				foreach(PathNode node in group.Value) node.PropagateCurvedFlag();
+			}
+
+			// 3. Make lines
 			HashSet<int> processedindices = new HashSet<int>();
 			foreach(KeyValuePair<int, List<PathNode>> group in result.InterpolationPoints)
 			{
-- 
GitLab