private int GetSortingOrder(Quad newQuad, List<Building> buildings) { int numberToCheck = Mathf.Min(buildings.Count, numBuildingsToCheck); int sortingOrder; int? sortingOrderUpperLimit = null; int? sortingOrderLowerLimit = null; for (int i = 1; i <= numberToCheck; i++) { int index = buildings.Count - i; Building otherBuilding = buildings[index]; Quad otherQuad = otherBuilding.attributes.quad; if (!Quad.OverlapQuads(newQuad, otherQuad)) continue; if (newQuad.ContainsTopPointsFromOtherQuad(otherQuad)) { if (sortingOrderUpperLimit != null) sortingOrderUpperLimit = Mathf.Min((int)sortingOrderUpperLimit, otherBuilding.attributes.sortingOrder); else sortingOrderUpperLimit = otherBuilding.attributes.sortingOrder; } else if (otherQuad.ContainsTopPointsFromOtherQuad(newQuad)) { if (sortingOrderLowerLimit != null) sortingOrderLowerLimit = Mathf.Max((int)sortingOrderLowerLimit, otherBuilding.attributes.sortingOrder); else sortingOrderLowerLimit = otherBuilding.attributes.sortingOrder; } } if (sortingOrderLowerLimit == null && sortingOrderUpperLimit == null) sortingOrder = baseSortingOrder; else if (sortingOrderLowerLimit == null) sortingOrder = (int)sortingOrderUpperLimit - 10; else if (sortingOrderUpperLimit == null) sortingOrder = (int)sortingOrderLowerLimit + 10; else sortingOrder = ((int)sortingOrderUpperLimit + (int)sortingOrderLowerLimit) / 2; return sortingOrder; }
private bool QuadsAreValidTogether(Quad quad1, Quad quad2) { if (quad1.ContainsTopPointsFromOtherQuad(quad2) && quad2.ContainsTopPointsFromOtherQuad(quad1)) return false; else return true; }