CSL_Traffic.LaneManager.GetLaneConnections C# (CSharp) Метод

GetLaneConnections() публичный статический Метод

public static GetLaneConnections ( uint laneId ) : uint[]
laneId uint
Результат uint[]
        public static uint[] GetLaneConnections(uint laneId)
        {
            Lane lane = GetLane(laneId);

            return lane.GetConnectionsAsArray();
        }

Usage Example

        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]);
                    }
                }
            }
        }