void RegisterSegmentCrossing(int segmentIndex, SegmentCrossing crossing) { if (!segmentCrossings.ContainsKey(segmentIndex)) { segmentCrossings[segmentIndex] = crossing; } else { if (segmentCrossings[segmentIndex].TrailCrossing != crossing.TrailCrossing) { overlaps.Add(segmentIndex); } } }
void RegisterCrossing(Puff p1, Puff p2, Puff q1, Puff q2, IntersectionResult result) { Debug.Log("Crossing between " + p1.Index + " and " + q1.Index); var trailCrossing = TrailCrossingFor(p1, q1); if (trailCrossing.Height == CrossingHeight.Unknown) { trailCrossing.Height = ClassifyCrossingHeight( p1.Position, p2.Position, q1.Position, q2.Position ); } if (trailCrossing.Direction == CrossingDirection.Unknown) { trailCrossing.Direction = (result == IntersectionResult.IntersectingFromRight) ? CrossingDirection.Right : CrossingDirection.Left; } var crossing = new SegmentCrossing(p1.Index, q1.Index, trailCrossing); RegisterSegmentCrossing(p1.Index, crossing); RegisterSegmentCrossing(q1.Index, crossing); }