Example #1
0
		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;
		}