public static void AddRoof(IRoof roof) { List <Vector3> polygon = roof.GetPolygon(); if (polygon.Count <= 0) { return; } Bounds bounds = new Bounds(polygon[0], Vector3.zero); for (int i = 1; i < polygon.Count; i++) { bounds.Encapsulate(polygon[i]); } InsideCheck.GridPosition gridPosition = InsideCheck.ToGridPosition(bounds.min); InsideCheck.GridPosition gridPosition2 = InsideCheck.ToGridPosition(bounds.max); for (int j = gridPosition.x; j <= gridPosition2.x; j++) { for (int k = gridPosition.y; k <= gridPosition2.y; k++) { InsideCheck.AddRoof(new InsideCheck.GridPosition(j, k), roof); } } }
private static bool IsRoofAbove(IRoof roof, Vector3 position) { return(roof.GetLevel() > position.y && MathEx.IsPointInPolygon(position, roof.GetPolygon())); }