void SetNodeMarkers(ushort nodeId, FastList<NodeLaneMarker> nodeMarkers)
{
NetNode node = NetManager.instance.m_nodes.m_buffer[nodeId];
int offsetMultiplier = node.CountSegments() <= 2 ? 3 : 1;
ushort segmentId = node.m_segment0;
for (int i = 0; i < 8 && segmentId != 0; i++)
{
NetSegment segment = NetManager.instance.m_segments.m_buffer[segmentId];
bool isEndNode = segment.m_endNode == nodeId;
Vector3 offset = segment.FindDirection(segmentId, nodeId) * offsetMultiplier;
NetInfo.Lane[] lanes = segment.Info.m_lanes;
uint laneId = segment.m_lanes;
for (int j = 0; j < lanes.Length && laneId != 0; j++)
{
//if ((lanes[j].m_laneType & (NetInfo.LaneType.Vehicle | NetInfo.LaneType.TransportVehicle)) != NetInfo.LaneType.None)
if ((lanes[j].m_laneType & NetInfo.LaneType.Vehicle) == NetInfo.LaneType.Vehicle)
{
Vector3 pos = Vector3.zero;
NetInfo.Direction laneDir = ((segment.m_flags & NetSegment.Flags.Invert) == NetSegment.Flags.None) ? lanes[j].m_finalDirection : NetInfo.InvertDirection(lanes[j].m_finalDirection);
bool isSource = false;
if (isEndNode)
{
if ((laneDir & (NetInfo.Direction.Forward | NetInfo.Direction.Avoid)) == NetInfo.Direction.Forward)
isSource = true;
pos = NetManager.instance.m_lanes.m_buffer[laneId].m_bezier.d;
}
else
{
if ((laneDir & (NetInfo.Direction.Backward | NetInfo.Direction.Avoid)) == NetInfo.Direction.Backward)
isSource = true;
pos = NetManager.instance.m_lanes.m_buffer[laneId].m_bezier.a;
}
nodeMarkers.Add(new NodeLaneMarker()
{
m_lane = laneId,
m_node = nodeId,
m_position = pos + offset,
m_color = colors[nodeMarkers.m_size],
m_isSource = isSource,
});
}
laneId = NetManager.instance.m_lanes.m_buffer[laneId].m_nextLane;
}
segmentId = segment.GetRightSegment(nodeId);
if (segmentId == node.m_segment0)
segmentId = 0;
}
for (int i = 0; i < nodeMarkers.m_size; i++)
{
if (!nodeMarkers.m_buffer[i].m_isSource)
continue;
uint[] connections = LaneManager.GetLaneConnections(nodeMarkers.m_buffer[i].m_lane);
if (connections == null || connections.Length == 0)
continue;
for (int j = 0; j < nodeMarkers.m_size; j++)
{
if (nodeMarkers.m_buffer[j].m_isSource)
continue;
if (connections.Contains(nodeMarkers.m_buffer[j].m_lane))
nodeMarkers.m_buffer[i].m_connections.Add(nodeMarkers.m_buffer[j]);
}
}
}