public static void WipeAndRefundExistingThings(IntVec3 thingPos, Rot4 thingRot, BuildableDef thingDef, Map map) { CellRect occupiedRect = GenAdj.OccupiedRect(thingPos, thingRot, thingDef.Size); foreach (IntVec3 current in occupiedRect) { foreach (Thing current2 in current.GetThingList(map).ToList <Thing>()) { if (GenSpawn.SpawningWipes(thingDef, current2.def)) { if (current2.def.category == ThingCategory.Item) { current2.DeSpawn(DestroyMode.Vanish); if (!GenPlace.TryPlaceThing(current2, current, map, ThingPlaceMode.Near, null, (IntVec3 x) => !occupiedRect.Contains(x))) { current2.Destroy(DestroyMode.Vanish); } } else { GenSpawn.Refund(current2, map, occupiedRect); } } } } }
public static void SpawnBuildingAsPossible(Building building, Map map, bool respawningAfterLoad = false) { bool flag = false; if (!building.OccupiedRect().InBounds(map)) { flag = true; } else { foreach (IntVec3 current in building.OccupiedRect()) { List <Thing> thingList = current.GetThingList(map); for (int i = 0; i < thingList.Count; i++) { if (thingList[i] is Pawn && building.def.passability == Traversability.Impassable) { flag = true; break; } if ((thingList[i].def.category == ThingCategory.Building || thingList[i].def.category == ThingCategory.Item) && GenSpawn.SpawningWipes(building.def, thingList[i].def)) { flag = true; break; } } if (flag) { break; } } } if (flag) { GenSpawn.Refund(building, map, CellRect.Empty); } else { GenSpawn.Spawn(building, building.Position, map, building.Rotation, WipeMode.FullRefund, respawningAfterLoad); } }