Skip to content

Commit

Permalink
CitiesSkylinesMods#555: removed buggy/reduandant code in DrawNodeCirc…
Browse files Browse the repository at this point in the history
…le()

Overlay node raduis is average of all connected segmetns.
  • Loading branch information
kianzarrin committed Nov 23, 2019
1 parent 9cb5c7c commit 19e23f7
Showing 1 changed file with 22 additions and 48 deletions.
70 changes: 22 additions & 48 deletions TLM/TLM/UI/TrafficManagerTool.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace TrafficManager.UI {
namespace TrafficManager.UI {
using System;
using System.Collections.Generic;
using System.Linq;
Expand Down Expand Up @@ -415,35 +415,28 @@ public void DrawNodeCircle(RenderManager.CameraInfo cameraInfo,
DrawNodeCircle(cameraInfo, nodeId, GetToolColor(warning, false), alpha);
}

/// <returns>the average half width of all connected segments</returns>
private float NodeRadius(ushort nodeId) {

float sum_half_width = 0;
int count = 0;
Constants.ServiceFactory.NetService.IterateNodeSegments(
nodeId,
(ushort segmentId, ref NetSegment segment) => {
sum_half_width += segment.Info.m_halfWidth;
count++;
return true;
});
return sum_half_width / count;
}

public void DrawNodeCircle(RenderManager.CameraInfo cameraInfo,
ushort nodeId,
Color color,
bool alpha = false) {
NetNode[] nodesBuffer = Singleton<NetManager>.instance.m_nodes.m_buffer;
NetSegment segment =
Singleton<NetManager>.instance.m_segments.m_buffer[ nodesBuffer[nodeId].m_segment0];

Vector3 pos = nodesBuffer[nodeId].m_position;
float terrainY = Singleton<TerrainManager>.instance.SampleDetailHeightSmooth(pos);
if (terrainY > pos.y) {
pos.y = terrainY;
}

Bezier3 bezier;
bezier.a = pos;
bezier.d = pos;

NetSegment.CalculateMiddlePoints(
bezier.a,
segment.m_startDirection,
bezier.d,
segment.m_endDirection,
false,
false,
out bezier.b,
out bezier.c);

DrawOverlayBezier(cameraInfo, bezier, color, alpha);
float r = NodeRadius(nodeId);
Vector3 pos = Singleton<NetManager>.instance.m_nodes.m_buffer[nodeId].m_position;
DrawOverlayCircle(cameraInfo, color, pos, r * 2, alpha);
}

public void DrawHalfSegment(RenderManager.CameraInfo cameraInfo,
Expand Down Expand Up @@ -486,10 +479,11 @@ bool IsMiddle(ushort nodeId) {
out bezier.b,
out bezier.c);


if(bStartNode & !IsMiddle(segment.m_endNode))
bezier = bezier.Cut(0, 0.5f);
if(!bStartNode && !IsMiddle(segment.m_startNode))
bezier = bezier.Cut(0.5f, 1f);
if (!bStartNode && !IsMiddle(segment.m_startNode))
bezier = bezier.Cut(0.5f, 1);

Singleton<ToolManager>.instance.m_drawCallData.m_overlayCalls++;
Singleton<RenderManager>.instance.OverlayEffect.DrawBezier(
Expand All @@ -505,26 +499,6 @@ bool IsMiddle(ushort nodeId) {
alpha);
}

private void DrawOverlayBezier(RenderManager.CameraInfo cameraInfo,
Bezier3 bezier,
Color color,
bool alpha = false,
float width = 8f) {
//const float width = 8f; // 8 - small roads; 16 - big roads
Singleton<ToolManager>.instance.m_drawCallData.m_overlayCalls++;
Singleton<RenderManager>.instance.OverlayEffect.DrawBezier(
cameraInfo,
color,
bezier,
width * 2f,
width,
width,
-1f,
1280f,
false,
alpha);
}

[UsedImplicitly]
private void DrawOverlayCircle(RenderManager.CameraInfo cameraInfo,
Color color,
Expand Down

0 comments on commit 19e23f7

Please sign in to comment.