Beispiel #1
0
        private static void SetSegments(ushort segmentId, IDictionary <ushort, SegmentAndNode> segments)
        {
            var segment = NetManager.instance.m_segments.m_buffer[segmentId];
            var seg     = new SegmentAndNode()
            {
                SegmentId  = segmentId,
                TargetNode = segment.m_endNode,
            };

            segments[segmentId] = seg;

            var infoIndex = segment.m_infoIndex;
            var node      = NetManager.instance.m_nodes.m_buffer[segment.m_startNode];

            if (node.CountSegments() == 2)
            {
                SetSegments(node.m_segment0 == segmentId ? node.m_segment1 : node.m_segment0, infoIndex, ref seg, segments);
            }

            node = NetManager.instance.m_nodes.m_buffer[segment.m_endNode];
            if (node.CountSegments() == 2)
            {
                SetSegments(node.m_segment0 == segmentId ? node.m_segment1 : node.m_segment0, infoIndex, ref seg, segments);
            }
        }
Beispiel #2
0
        private static void SetSegments(ushort segmentId, ushort infoIndex, ref SegmentAndNode previousSeg, IDictionary <ushort, SegmentAndNode> segments)
        {
            var segment = NetManager.instance.m_segments.m_buffer[segmentId];

            if (segment.m_infoIndex != infoIndex || segments.ContainsKey(segmentId))
            {
                return;
            }

            var seg = default(SegmentAndNode);

            seg.SegmentId = segmentId;

            var    previousSegment = NetManager.instance.m_segments.m_buffer[previousSeg.SegmentId];
            ushort nextNode;

            if (segment.m_startNode == previousSegment.m_endNode ||
                segment.m_startNode == previousSegment.m_startNode)
            {
                nextNode       = segment.m_endNode;
                seg.TargetNode = segment.m_startNode == previousSeg.TargetNode
                    ? segment.m_endNode
                    : segment.m_startNode;
            }
            else
            {
                nextNode       = segment.m_startNode;
                seg.TargetNode = segment.m_endNode == previousSeg.TargetNode
                    ? segment.m_startNode
                    : segment.m_endNode;
            }

            segments[segmentId] = seg;

            var node = NetManager.instance.m_nodes.m_buffer[nextNode];

            if (node.CountSegments() == 2)
            {
                SetSegments(node.m_segment0 == segmentId ? node.m_segment1 : node.m_segment0, infoIndex, ref seg, segments);
            }
        }