public static List<Linedef> GetUnmatchingLinedefs(SectorGroup a, SectorGroup b, UnmatchingLinedefsType type) { List<Linedef> unmatching = new List<Linedef>(); Vector2D offset = b.BBAnchor - a.BBAnchor; if ((type & UnmatchingLinedefsType.Top) == UnmatchingLinedefsType.Top) { offset = SectorGroup.GetOffset(a, b); foreach (Linedef ld in b.Linedefs) { bool matches = false; foreach (Line2D line in a.Lines) { float d1 = line.GetDistanceToLine(ld.Start.Position - offset, true); float d2 = line.GetDistanceToLine(ld.End.Position - offset, true); if ((d1 >= -float.Epsilon && d1 <= float.Epsilon) && (d2 >= -float.Epsilon && d2 <= float.Epsilon)) { matches = true; break; } } if (!matches) unmatching.Add(ld); } } if ((type & UnmatchingLinedefsType.Bottom) == UnmatchingLinedefsType.Bottom) { offset = SectorGroup.GetOffset(a, b); foreach (Linedef ld in a.Linedefs) { bool matches = false; foreach (Line2D line in b.Lines) { float d1 = line.GetDistanceToLine(ld.Start.Position + offset, true); float d2 = line.GetDistanceToLine(ld.End.Position + offset, true); if ((d1 >= -float.Epsilon && d1 <= float.Epsilon) && (d2 >= -float.Epsilon && d2 <= float.Epsilon)) { matches = true; break; } } if (!matches) unmatching.Add(ld); } } if ((type & UnmatchingLinedefsType.SpecialsTop) == UnmatchingLinedefsType.SpecialsTop) { SectorGroup.TopSpecialsMatch(a, b, out unmatching); } if ((type & UnmatchingLinedefsType.SpecialsBottom) == UnmatchingLinedefsType.SpecialsBottom) { SectorGroup.BottomSpecialsMatch(a, b, out unmatching); } return unmatching; }
public ContextMenuInfo(SectorGroup top, SectorGroup bottom, UnmatchingLinedefsType type) { this.top = top; this.bottom = bottom; this.type = type; }