public static CellRect FindUsableRect(int width, int height, Map map, float minFertility = 0f, bool noItems = false) { IntVec3 center = map.Center; float num = 1f; CellRect cellRect; for (;;) { IntVec3 center2 = center + new IntVec3((int)Rand.Range(-num, num), 0, (int)Rand.Range(-num, num)); cellRect = CellRect.CenteredOn(center2, width / 2); cellRect.Width = width; cellRect.Height = height; cellRect = cellRect.ExpandedBy(1); bool flag = true; CellRect.CellRectIterator iterator = cellRect.GetIterator(); while (!iterator.Done()) { IntVec3 intVec = iterator.Current; if (intVec.Fogged(map) || !intVec.Walkable(map) || !intVec.GetTerrain(map).affordances.Contains(TerrainAffordanceDefOf.Heavy) || intVec.GetTerrain(map).fertility < minFertility || intVec.GetZone(map) != null || TutorUtility.ContainsBlockingThing(intVec, map, noItems) || intVec.InNoBuildEdgeArea(map) || intVec.InNoZoneEdgeArea(map)) { flag = false; break; } iterator.MoveNext(); } if (flag) { break; } num += 0.25f; } return(cellRect.ContractedBy(1)); }
public static CellRect FindUsableRect(int width, int height, Map map, float minFertility = 0f, bool noItems = false) { IntVec3 center = map.Center; float num = 1f; CellRect cellRect; while (true) { IntVec3 center2 = center + new IntVec3((int)Rand.Range((float)(0.0 - num), num), 0, (int)Rand.Range((float)(0.0 - num), num)); cellRect = CellRect.CenteredOn(center2, width / 2); cellRect.Width = width; cellRect.Height = height; cellRect = cellRect.ExpandedBy(1); bool flag = true; CellRect.CellRectIterator iterator = cellRect.GetIterator(); while (!iterator.Done()) { IntVec3 current = iterator.Current; if (!current.Fogged(map) && current.Walkable(map) && current.GetTerrain(map).affordances.Contains(TerrainAffordance.Heavy) && !(current.GetTerrain(map).fertility < minFertility) && current.GetZone(map) == null && !TutorUtility.ContainsBlockingThing(current, map, noItems) && !current.InNoBuildEdgeArea(map) && !current.InNoZoneEdgeArea(map)) { iterator.MoveNext(); continue; } flag = false; break; } if (!flag) { num = (float)(num + 0.25); continue; } break; } return(cellRect.ContractedBy(1)); }