public static void GetSmashableThingsIn(Room room, Pawn pawn, List <Thing> outCandidates, Predicate <Thing> customValidator = null, int extraMinBuildingOrItemMarketValue = 0) { outCandidates.Clear(); List <Thing> containedAndAdjacentThings = room.ContainedAndAdjacentThings; for (int i = 0; i < containedAndAdjacentThings.Count; i++) { Thing thing = containedAndAdjacentThings[i]; if (TantrumMentalStateUtility.CanSmash(pawn, thing, false, customValidator, extraMinBuildingOrItemMarketValue)) { outCandidates.Add(containedAndAdjacentThings[i]); } } }
public static void GetSmashableThingsNear(Pawn pawn, IntVec3 near, List <Thing> outCandidates, Predicate <Thing> customValidator = null, int extraMinBuildingOrItemMarketValue = 0, int maxDistance = 40) { outCandidates.Clear(); if (!pawn.CanReach(near, PathEndMode.OnCell, Danger.Deadly, false, TraverseMode.ByPawn)) { return; } Region region = near.GetRegion(pawn.Map, RegionType.Set_Passable); if (region == null) { return; } TraverseParms traverseParams = TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false); RegionTraverser.BreadthFirstTraverse(region, (Region from, Region to) => to.Allows(traverseParams, false), delegate(Region r) { List <Thing> list = r.ListerThings.ThingsInGroup(ThingRequestGroup.BuildingArtificial); for (int i = 0; i < list.Count; i++) { if (list[i].Position.InHorDistOf(near, (float)maxDistance) && TantrumMentalStateUtility.CanSmash(pawn, list[i], true, customValidator, extraMinBuildingOrItemMarketValue)) { outCandidates.Add(list[i]); } } List <Thing> list2 = r.ListerThings.ThingsInGroup(ThingRequestGroup.HaulableEver); for (int j = 0; j < list2.Count; j++) { if (list2[j].Position.InHorDistOf(near, (float)maxDistance) && TantrumMentalStateUtility.CanSmash(pawn, list2[j], true, customValidator, extraMinBuildingOrItemMarketValue)) { outCandidates.Add(list2[j]); } } List <Thing> list3 = r.ListerThings.ThingsInGroup(ThingRequestGroup.Pawn); for (int k = 0; k < list3.Count; k++) { if (list3[k].Position.InHorDistOf(near, (float)maxDistance) && TantrumMentalStateUtility.CanSmash(pawn, list3[k], true, customValidator, extraMinBuildingOrItemMarketValue)) { outCandidates.Add(list3[k]); } } return(false); }, 40, RegionType.Set_Passable); }
internal bool <> m__1(Region r) { List <Thing> list = r.ListerThings.ThingsInGroup(ThingRequestGroup.BuildingArtificial); for (int i = 0; i < list.Count; i++) { if (list[i].Position.InHorDistOf(this.near, (float)this.maxDistance) && TantrumMentalStateUtility.CanSmash(this.pawn, list[i], true, this.customValidator, this.extraMinBuildingOrItemMarketValue)) { this.outCandidates.Add(list[i]); } } List <Thing> list2 = r.ListerThings.ThingsInGroup(ThingRequestGroup.HaulableEver); for (int j = 0; j < list2.Count; j++) { if (list2[j].Position.InHorDistOf(this.near, (float)this.maxDistance) && TantrumMentalStateUtility.CanSmash(this.pawn, list2[j], true, this.customValidator, this.extraMinBuildingOrItemMarketValue)) { this.outCandidates.Add(list2[j]); } } List <Thing> list3 = r.ListerThings.ThingsInGroup(ThingRequestGroup.Pawn); for (int k = 0; k < list3.Count; k++) { if (list3[k].Position.InHorDistOf(this.near, (float)this.maxDistance) && TantrumMentalStateUtility.CanSmash(this.pawn, list3[k], true, this.customValidator, this.extraMinBuildingOrItemMarketValue)) { this.outCandidates.Add(list3[k]); } } return(false); }