Ejemplo n.º 1
0
        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);
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }