예제 #1
0
        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]);
                }
            }
        }
예제 #2
0
        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);
            }