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; }
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); }
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); }
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); }
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); }
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); }
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)); }
internal bool <> m__0(Thing x) { return(TantrumMentalStateUtility.CanAttackPrisoner(this.pawn, x)); }