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