From 32e450e089c3c9391a32f65b57d12ebab8f1433b Mon Sep 17 00:00:00 2001 From: spherallic <spherallic@gmail.com> Date: Fri, 2 Jun 2023 13:58:08 +0200 Subject: [PATCH] Draw waypoint sequences in classic modes --- Source/Core/Rendering/Renderer2D.cs | 111 ++++++++++++++-------------- 1 file changed, 56 insertions(+), 55 deletions(-) diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs index f274e6f0f..b0e2e8716 100755 --- a/Source/Core/Rendering/Renderer2D.cs +++ b/Source/Core/Rendering/Renderer2D.cs @@ -27,7 +27,7 @@ using CodeImp.DoomBuilder.Editing; using CodeImp.DoomBuilder.GZBuilder.Data; //mxd using CodeImp.DoomBuilder.Config; //mxd using CodeImp.DoomBuilder.GZBuilder; -using System.Security.Cryptography; +using System.Linq; #endregion @@ -1601,7 +1601,7 @@ namespace CodeImp.DoomBuilder.Rendering axes = new List<Thing>(); axistransferlines = new List<Thing>(); - //waypoints = new List<Thing>(); + waypoints = new List<Thing>(); //polyanchors = new List<Thing>(); //polyspawns = new List<Thing>(); //firstlines = new List<Linedef>(); @@ -1613,16 +1613,16 @@ namespace CodeImp.DoomBuilder.Rendering axes.Add(t); else if (t.Type == 1702) // General.Settings.RenderNiGHTSPath && t.Type == General.Map.FormatInterface.AxisTransferLineType axistransferlines.Add(t); - //else if (General.Settings.RenderZoomtubes && t.Type == 753) //General.Map.FormatInterface.WaypointType - // waypoints.Add(t); + else if (t.Type == 753) // General.Settings.RenderZoomtubes && t.Type == General.Map.FormatInterface.WaypointType + waypoints.Add(t); //else if (General.Settings.RenderPolyPreview && t.Type == 760) // polyanchors.Add(t); //else if (General.Settings.RenderPolyPreview && (t.Type == 761 || t.Type == 762)) // polyspawns.Add(t); } - // Sort waypoints by angle - //waypoints.Sort((x, y) => (x.AngleDoom.CompareTo(y.AngleDoom))); + // Sort waypoints by order and sequence number. + waypoints = waypoints.OrderBy(x => x.Args[0]).ThenBy(x => x.Args[1]).ToList(); // Sort polyobject stuff by "angle"/tag //polyanchors.Sort((x, y) => (x.AngleDoom.CompareTo(y.AngleDoom))); @@ -1645,54 +1645,55 @@ namespace CodeImp.DoomBuilder.Rendering //Render (zoom tube) waypoint sequences. //if (General.Settings.RenderZoomtubes) - //{ - // int i = 0; - // int size = waypoints.Count; - // int seqStart = 0; - // ITextLabel[] sequencelabels = new ITextLabel[256]; - // while (i < size) - // { - // int iNext = i + 1; - // if (waypoints[i].AngleDoom % 256 == 0) // start of a new sequence? - // { - // seqStart = i; - // sequencelabels[waypoints[i].AngleDoom / 256] = new TextLabel() // create sequence ID label - // { - // Text = (waypoints[i].AngleDoom / 256).ToString(), - // AlignX = TextAlignmentX.Center, - // AlignY = TextAlignmentY.Middle, - // Color = General.Colors.WaypointColor, - // TransformCoords = true, - // Location = waypoints[i].Position - // }; - // } - // if (iNext < size && waypoints[iNext].AngleDoom == waypoints[i].AngleDoom + 1) - // { - // // draw line between this waypoint and the next - // RenderLine(waypoints[i].Position, waypoints[iNext].Position, 1.5f, General.Colors.WaypointColor, true); - // } - // else if (iNext < size && waypoints[iNext].AngleDoom == waypoints[i].AngleDoom) - // { - // // mark duplicate waypoints - // RenderCircle(waypoints[i].Position, 32f, 1f, PixelColor.FromColor(Color.Red), true); - // RenderCircle(waypoints[iNext].Position, 32f, 1f, PixelColor.FromColor(Color.Red), true); - // } - // else if (iNext < size && i > 0 && waypoints[i].AngleDoom - waypoints[i - 1].AngleDoom > 1 && waypoints[iNext].AngleDoom > waypoints[seqStart].AngleDoom + 255) - // { - // // mark inaccessible waypoints - // RenderCircle(waypoints[i].Position, 32f, 1f, PixelColor.FromColor(Color.Red), true); - // } - // else - // { - // // draw different line between last and first waypoint of this sequence - // RenderLine(waypoints[i].Position, waypoints[seqStart].Position, 0.75f, General.Colors.WaypointLoopColor, true); - // } - // i = iNext; - // } - // - // for (i = 0; i < 256; i++) - // if (sequencelabels[i] != null) RenderText(sequencelabels[i]); - //} + { + int i = 0; + int size = waypoints.Count; + int seqStart = 0; + ITextLabel[] sequencelabels = new ITextLabel[256]; + while (i < size) + { + int iNext = i + 1; + if (waypoints[i].Args[1] == 0) // start of a new sequence? + { + seqStart = i; + sequencelabels[waypoints[i].Args[0]] = new TextLabel() // create sequence ID label + { + Text = waypoints[i].Args[0].ToString(), + AlignX = TextAlignmentX.Center, + AlignY = TextAlignmentY.Middle, + Color = PixelColor.FromColor(Color.FromArgb(255, 0, 255, 192)), + TransformCoords = true, + Location = waypoints[i].Position + }; + } + + if (iNext < size) + { + // draw line between this waypoint and the next + if (waypoints[iNext].Args[1] == waypoints[i].Args[1] + 1) + RenderLine(waypoints[i].Position, waypoints[iNext].Position, 1.5f, PixelColor.FromColor(Color.FromArgb(255, 0, 255, 192)), true); + + // mark duplicate waypoints + else if (waypoints[iNext].Args[1] == waypoints[i].Args[1]) + { + RenderCircle(waypoints[i].Position, 32f, 1f, PixelColor.FromColor(Color.Red), true); + RenderCircle(waypoints[iNext].Position, 32f, 1f, PixelColor.FromColor(Color.Red), true); + } + + // mark inaccessible waypoints + else if (i > 0 && waypoints[i].Args[1] - waypoints[i - 1].Args[1] > 1) + RenderCircle(waypoints[i].Position, 32f, 1f, PixelColor.FromColor(Color.Red), true); + + // draw different line between last and first waypoint of this sequence + else if (waypoints[i].Args[0] == waypoints[seqStart].Args[0] && waypoints[iNext].Args[0] > waypoints[i].Args[0]) + RenderLine(waypoints[i].Position, waypoints[seqStart].Position, 0.75f, PixelColor.FromColor(Color.FromArgb(255, 0, 192, 255)), true); + } + i = iNext; + } + + for (i = 0; i < 256; i++) + if (sequencelabels[i] != null) RenderText(sequencelabels[i]); + } //Render axis transfer lines. //if (General.Settings.RenderNiGHTSPath) @@ -1721,7 +1722,7 @@ namespace CodeImp.DoomBuilder.Rendering foreach (Thing axis in axes) { int mare = axis.Args[0]; - RenderCircle(axis.Position, (float)(axis.AngleDoom & 0x3FFF), 1f, General.Colors.GetNiGHTSColor(mare), true); + RenderCircle(axis.Position, axis.Args[2], 1f, General.Colors.GetNiGHTSColor(mare), true); } } -- GitLab