void SetLaneMarkers()
{
m_hoveredLaneMarkers.Clear();
if (m_segments.Count == 0)
return;
NetSegment segment = NetManager.instance.m_segments.m_buffer[m_segments.Values.First().m_segmentId];
NetInfo info = segment.Info;
int laneCount = info.m_lanes.Length;
bool bothWays = info.m_hasBackwardVehicleLanes && info.m_hasForwardVehicleLanes;
bool isInverted = false;
for (ushort i = 0; i < laneCount; i++)
m_hoveredLaneMarkers[i] = new FastList<SegmentLaneMarker>();
foreach (Segment seg in m_segments.Values)
{
segment = NetManager.instance.m_segments.m_buffer[seg.m_segmentId];
uint laneId = segment.m_lanes;
if (bothWays)
{
isInverted = seg.m_targetNode == segment.m_startNode;
if ((segment.m_flags & NetSegment.Flags.Invert) == NetSegment.Flags.Invert)
isInverted = !isInverted;
}
for (int j = 0; j < laneCount && laneId != 0; j++)
{
NetLane lane = NetManager.instance.m_lanes.m_buffer[laneId];
//if ((info.m_lanes[j].m_laneType & (NetInfo.LaneType.Vehicle | NetInfo.LaneType.TransportVehicle)) != NetInfo.LaneType.None)
if ((info.m_lanes[j].m_laneType & NetInfo.LaneType.Vehicle) == NetInfo.LaneType.Vehicle)
{
Bezier3 bezier = lane.m_bezier;
bezier.GetBounds().Expand(1f);
int index = j;
if (bothWays && isInverted)
index += (j % 2 == 0) ? 1 : -1;
m_hoveredLaneMarkers[index].Add(new SegmentLaneMarker()
{
m_bezier = bezier,
m_lane = laneId,
m_laneIndex = index
});
}
laneId = lane.m_nextLane;
}
}
}