private bool TryFindNewTarget()
		{
			TantrumMentalStateUtility.GetSmashableThingsNear(base.pawn, base.pawn.Position, MentalState_TargetedTantrum.tmpThings, null, 300, 40);
			bool result = ((IEnumerable<Thing>)MentalState_TargetedTantrum.tmpThings).TryRandomElementByWeight<Thing>((Func<Thing, float>)((Thing x) => x.MarketValue * (float)x.stackCount), out base.target);
			MentalState_TargetedTantrum.tmpThings.Clear();
			return result;
		}
예제 #2
0
        public override bool StateCanOccur(Pawn pawn)
        {
            bool result;

            if (!base.StateCanOccur(pawn))
            {
                result = false;
            }
            else
            {
                Building_Bed ownedBed = pawn.ownership.OwnedBed;
                if (ownedBed == null || ownedBed.GetRoom(RegionType.Set_Passable) == null || ownedBed.GetRoom(RegionType.Set_Passable).PsychologicallyOutdoors)
                {
                    result = false;
                }
                else
                {
                    MentalStateWorker_BedroomTantrum.tmpThings.Clear();
                    TantrumMentalStateUtility.GetSmashableThingsIn(ownedBed.GetRoom(RegionType.Set_Passable), pawn, MentalStateWorker_BedroomTantrum.tmpThings, null, 0);
                    bool flag = MentalStateWorker_BedroomTantrum.tmpThings.Any <Thing>();
                    MentalStateWorker_BedroomTantrum.tmpThings.Clear();
                    result = flag;
                }
            }
            return(result);
        }
예제 #3
0
        private bool TryFindNewTarget()
        {
            TantrumMentalStateUtility.GetSmashableThingsNear(pawn, pawn.Position, tmpThings, null, 300);
            bool result = tmpThings.TryRandomElementByWeight((Thing x) => x.MarketValue * (float)x.stackCount, out target);

            tmpThings.Clear();
            return(result);
        }
        public override bool StateCanOccur(Pawn pawn)
        {
            if (!base.StateCanOccur(pawn))
            {
                return(false);
            }
            tmpThings.Clear();
            TantrumMentalStateUtility.GetSmashableThingsNear(pawn, pawn.Position, tmpThings);
            bool result = tmpThings.Count >= 2;

            tmpThings.Clear();
            return(result);
        }
        public override bool StateCanOccur(Pawn pawn)
        {
            if (!base.StateCanOccur(pawn))
            {
                return(false);
            }
            MentalStateWorker_SadisticRageTantrum.tmpThings.Clear();
            TantrumMentalStateUtility.GetSmashableThingsNear(pawn, pawn.Position, MentalStateWorker_SadisticRageTantrum.tmpThings, (Thing x) => TantrumMentalStateUtility.CanAttackPrisoner(pawn, x), 0, 40);
            bool result = MentalStateWorker_SadisticRageTantrum.tmpThings.Any <Thing>();

            MentalStateWorker_SadisticRageTantrum.tmpThings.Clear();
            return(result);
        }
예제 #6
0
        public override bool StateCanOccur(Pawn pawn)
        {
            if (!base.StateCanOccur(pawn))
            {
                return(false);
            }
            tmpThings.Clear();
            TantrumMentalStateUtility.GetSmashableThingsNear(pawn, pawn.Position, tmpThings, (Thing x) => TantrumMentalStateUtility.CanAttackPrisoner(pawn, x));
            bool result = tmpThings.Any();

            tmpThings.Clear();
            return(result);
        }
        public override bool StateCanOccur(Pawn pawn)
        {
            if (!base.StateCanOccur(pawn))
            {
                return(false);
            }
            MentalStateWorker_TargetedTantrum.tmpThings.Clear();
            TantrumMentalStateUtility.GetSmashableThingsNear(pawn, pawn.Position, MentalStateWorker_TargetedTantrum.tmpThings, null, 300, 40);
            bool result = MentalStateWorker_TargetedTantrum.tmpThings.Any();

            MentalStateWorker_TargetedTantrum.tmpThings.Clear();
            return(result);
        }
예제 #8
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]);
                }
            }
        }
        protected override void GetPotentialTargets(List <Thing> outThings)
        {
            outThings.Clear();
            Building_Bed ownedBed = pawn.ownership.OwnedBed;

            if (ownedBed != null)
            {
                if (ownedBed.GetRoom() != null && !ownedBed.GetRoom().PsychologicallyOutdoors)
                {
                    TantrumMentalStateUtility.GetSmashableThingsIn(ownedBed.GetRoom(), pawn, outThings, GetCustomValidator());
                }
                else
                {
                    TantrumMentalStateUtility.GetSmashableThingsNear(pawn, ownedBed.Position, outThings, GetCustomValidator(), 0, 8);
                }
            }
        }
        protected override void GetPotentialTargets(List <Thing> outThings)
        {
            outThings.Clear();
            Building_Bed ownedBed = this.pawn.ownership.OwnedBed;

            if (ownedBed == null)
            {
                return;
            }
            if (ownedBed.GetRoom(RegionType.Set_Passable) != null && !ownedBed.GetRoom(RegionType.Set_Passable).PsychologicallyOutdoors)
            {
                TantrumMentalStateUtility.GetSmashableThingsIn(ownedBed.GetRoom(RegionType.Set_Passable), this.pawn, outThings, this.GetCustomValidator(), 0);
            }
            else
            {
                TantrumMentalStateUtility.GetSmashableThingsNear(this.pawn, ownedBed.Position, outThings, this.GetCustomValidator(), 0, 8);
            }
        }
        public override bool StateCanOccur(Pawn pawn)
        {
            bool result;

            if (!base.StateCanOccur(pawn))
            {
                result = false;
            }
            else
            {
                MentalStateWorker_TantrumAll.tmpThings.Clear();
                TantrumMentalStateUtility.GetSmashableThingsNear(pawn, pawn.Position, MentalStateWorker_TantrumAll.tmpThings, null, 0, 40);
                bool flag = MentalStateWorker_TantrumAll.tmpThings.Count >= 2;
                MentalStateWorker_TantrumAll.tmpThings.Clear();
                result = flag;
            }
            return(result);
        }
예제 #12
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);
        }
예제 #13
0
        public override bool StateCanOccur(Pawn pawn)
        {
            if (!base.StateCanOccur(pawn))
            {
                return(false);
            }
            Building_Bed ownedBed = pawn.ownership.OwnedBed;

            if (ownedBed == null || ownedBed.GetRoom() == null || ownedBed.GetRoom().PsychologicallyOutdoors)
            {
                return(false);
            }
            tmpThings.Clear();
            TantrumMentalStateUtility.GetSmashableThingsIn(ownedBed.GetRoom(), pawn, tmpThings);
            bool result = tmpThings.Any();

            tmpThings.Clear();
            return(result);
        }
 protected override void GetPotentialTargets(List <Thing> outThings)
 {
     TantrumMentalStateUtility.GetSmashableThingsNear(pawn, pawn.Position, outThings, GetCustomValidator());
 }
            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);
            }
 private bool <GetCustomValidator> m__0(Thing x)
 {
     return(TantrumMentalStateUtility.CanAttackPrisoner(this.pawn, x));
 }
 protected override Predicate <Thing> GetCustomValidator()
 {
     return((Thing x) => TantrumMentalStateUtility.CanAttackPrisoner(pawn, x));
 }
예제 #18
0
 internal bool <> m__0(Thing x)
 {
     return(TantrumMentalStateUtility.CanAttackPrisoner(this.pawn, x));
 }