예제 #1
0
        private void Init()
        {
            var segment = Utilities.GetSegment(Id);

            IsStartSide  = segment.m_startNode == Markup.Id;
            IsLaneInvert = IsStartSide ^ segment.IsInvert();

            var info           = segment.Info;
            var lanes          = segment.GetLanesId().ToArray();
            var driveLanesIdxs = info.m_sortedLanes.Where(s => Utilities.IsDriveLane(info.m_lanes[s]));

            if (!IsLaneInvert)
            {
                driveLanesIdxs = driveLanesIdxs.Reverse();
            }

            DriveLanes = driveLanesIdxs.Select(d => new DriveLane(this, lanes[d], info.m_lanes[d])).ToArray();
            if (!DriveLanes.Any())
            {
                return;
            }

            Lines = new SegmentMarkupLine[DriveLanes.Length + 1];

            for (int i = 0; i < Lines.Length; i += 1)
            {
                var left       = i - 1 >= 0 ? DriveLanes[i - 1] : null;
                var right      = i < DriveLanes.Length ? DriveLanes[i] : null;
                var markupLine = new SegmentMarkupLine(this, left, right);
                Lines[i] = markupLine;
            }
        }
예제 #2
0
파일: Enter.cs 프로젝트: Quboid/NodeMarkup
        private void CreatePoints(NetSegment segment)
        {
            var info           = segment.Info;
            var lanes          = segment.GetLanesId().ToArray();
            var driveLanesIdxs = info.m_sortedLanes.Where(s => Utilities.IsDriveLane(info.m_lanes[s]));

            if (!IsLaneInvert)
            {
                driveLanesIdxs = driveLanesIdxs.Reverse();
            }

            DriveLanes = driveLanesIdxs.Select(d => new DriveLane(this, lanes[d], info.m_lanes[d])).ToArray();
            if (!DriveLanes.Any())
            {
                return;
            }

            Lines = new SegmentMarkupLine[DriveLanes.Length + 1];

            for (int i = 0; i < Lines.Length; i += 1)
            {
                var left       = i - 1 >= 0 ? DriveLanes[i - 1] : null;
                var right      = i < DriveLanes.Length ? DriveLanes[i] : null;
                var markupLine = new SegmentMarkupLine(this, left, right);
                Lines[i] = markupLine;
            }

            foreach (var markupLine in Lines)
            {
                PointsList.AddRange(markupLine.GetMarkupPoints());
            }
        }