public override void RenderOverlay(RenderManager.CameraInfo cameraInfo)
{
base.RenderOverlay(cameraInfo);
if (m_selectedNode != 0)
{
FastList<NodeLaneMarker> nodeMarkers;
if (m_nodeMarkers.TryGetValue(m_selectedNode, out nodeMarkers))
{
Vector3 nodePos = NetManager.instance.m_nodes.m_buffer[m_selectedNode].m_position;
for (int i = 0; i < nodeMarkers.m_size; i++)
{
NodeLaneMarker laneMarker = nodeMarkers.m_buffer[i];
for (int j = 0; j < laneMarker.m_connections.m_size; j++)
RenderLane(cameraInfo, laneMarker.m_position, laneMarker.m_connections.m_buffer[j].m_position, nodePos, laneMarker.m_color);
if (m_selectedMarker != laneMarker && !IsActive(laneMarker))
continue;
if (m_selectedMarker == laneMarker)
{
RaycastOutput output;
if (RayCastSegmentAndNode(out output))
{
RenderLane(cameraInfo, m_selectedMarker.m_position, output.m_hitPos, nodePos, m_selectedMarker.m_color);
m_selectedMarker.m_size = 2f;
}
}
RenderManager.instance.OverlayEffect.DrawCircle(cameraInfo, laneMarker.m_color, laneMarker.m_position, laneMarker.m_size, laneMarker.m_position.y - 1f, laneMarker.m_position.y + 1f, true, true);
}
}
}
else
{
foreach (KeyValuePair<int, FastList<SegmentLaneMarker>> keyValuePair in m_hoveredLaneMarkers)
{
bool renderBig = false;
if (m_hoveredLanes == keyValuePair.Key)
renderBig = true;
FastList<SegmentLaneMarker> laneMarkers = keyValuePair.Value;
for (int i = 0; i < laneMarkers.m_size; i++)
{
RenderManager.instance.OverlayEffect.DrawBezier(cameraInfo, new Color(0f, 0f, 1f, 0.75f), laneMarkers.m_buffer[i].m_bezier, renderBig ? 2f : laneMarkers.m_buffer[i].m_size, 0, 0, Mathf.Min(laneMarkers.m_buffer[i].m_bezier.a.y, laneMarkers.m_buffer[i].m_bezier.d.y) - 1f, Mathf.Max(laneMarkers.m_buffer[i].m_bezier.a.y, laneMarkers.m_buffer[i].m_bezier.d.y) + 1f, true, false);
}
}
foreach (SegmentLaneMarker marker in m_selectedLaneMarkers)
{
RenderManager.instance.OverlayEffect.DrawBezier(cameraInfo, new Color(0f, 1f, 0f, 0.75f), marker.m_bezier, 2f, 0, 0, Mathf.Min(marker.m_bezier.a.y, marker.m_bezier.d.y) - 1f, Mathf.Max(marker.m_bezier.a.y, marker.m_bezier.d.y) + 1f, true, false);
}
}
foreach (ushort node in m_nodeMarkers.Keys)
{
if (node == m_selectedNode || (NetManager.instance.m_nodes.m_buffer[node].m_flags & CUSTOMIZED_NODE_FLAG) != CUSTOMIZED_NODE_FLAG)
continue;
FastList<NodeLaneMarker> list = m_nodeMarkers[node];
Vector3 nodePos = NetManager.instance.m_nodes.m_buffer[node].m_position;
for (int i = 0; i < list.m_size; i++)
{
NodeLaneMarker laneMarker = list.m_buffer[i];
Color color = laneMarker.m_color;
color.a = 0.75f;
for (int j = 0; j < laneMarker.m_connections.m_size; j++)
{
if (((NetLane.Flags)NetManager.instance.m_lanes.m_buffer[laneMarker.m_connections.m_buffer[j].m_lane].m_flags & NetLane.Flags.Created) == NetLane.Flags.Created)
RenderLane(cameraInfo, laneMarker.m_position, laneMarker.m_connections.m_buffer[j].m_position, nodePos, color);
}
}
}
if (m_hoveredNode != 0)
{
NetNode node = NetManager.instance.m_nodes.m_buffer[m_hoveredNode];
RenderManager.instance.OverlayEffect.DrawCircle(cameraInfo, new Color(0f, 0f, 0.5f, 0.75f), node.m_position, 15f, node.m_position.y - 1f, node.m_position.y + 1f, true, true);
}
}