protected override Job TryGivePlayJob(Pawn pawn, Thing t) { if ((t as ThingWithComps).TryGetComp <CompMountable>().IsMounted&& !ToolsForHaulUtility.IsDriverOfThisVehicle(pawn, t)) { return(null); } if (!(t as ThingWithComps).TryGetComp <CompRefuelable>().HasFuel) { return(null); } if (t.IsForbidden(Faction.OfPlayer)) { return(null); } if (!JoyUtility.EnjoyableOutsideNow(pawn, null)) { return(null); } if (PawnUtility.WillSoonHaveBasicNeed(pawn)) { return(null); } Region reg; if (!CellFinder.TryFindClosestRegionWith(pawn.Position.GetRegion(), TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), (Region r) => r.Room.PsychologicallyOutdoors && !r.IsForbiddenEntirely(pawn), 100, out reg)) { return(null); } IntVec3 root; if (!reg.TryFindRandomCellInRegionUnforbidden(pawn, null, out root)) { return(null); } List <IntVec3> list; if (!WalkPathFinder.TryFindWalkPath(pawn, root, out list)) { return(null); } Job job = new Job(this.def.jobDef, list[0]) { targetQueueA = new List <TargetInfo>(), targetB = t, }; for (int i = 1; i < list.Count; i++) { job.targetQueueA.Add(list[i]); } job.locomotionUrgency = LocomotionUrgency.Jog; return(job); }
// Token: 0x06000568 RID: 1384 RVA: 0x00035040 File Offset: 0x00033440 public override Job TryGiveJob(Pawn pawn) { float HowMuchSnowIsThere = 0; if (pawn.Map.weatherManager.curWeather.snowRate > 0.0f) { HowMuchSnowIsThere = pawn.Map.weatherManager.curWeather.snowRate; } if (HowMuchSnowIsThere < 0.1f) { return(null); } if (!JoyUtility.EnjoyableOutsideNow(pawn, null)) { return(null); } if (PawnUtility.WillSoonHaveBasicNeed(pawn)) { return(null); } Predicate <IntVec3> cellValidator = (IntVec3 x) => !PawnUtility.KnownDangerAt(x, pawn.Map, pawn) && !x.GetTerrain(pawn.Map).avoidWander&& x.Standable(pawn.Map) && !x.Roofed(pawn.Map); Predicate <Region> validator = delegate(Region x) { IntVec3 intVec; return(x.Room.PsychologicallyOutdoors && !x.IsForbiddenEntirely(pawn) && x.TryFindRandomCellInRegionUnforbidden(pawn, cellValidator, out intVec)); }; Region reg; if (!CellFinder.TryFindClosestRegionWith(pawn.GetRegion(RegionType.Set_Passable), TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), validator, 100, out reg, RegionType.Set_Passable)) { return(null); } IntVec3 root; if (!reg.TryFindRandomCellInRegionUnforbidden(pawn, cellValidator, out root)) { return(null); } List <IntVec3> list; if (!WalkPathFinder.TryFindWalkPath(pawn, root, out list)) { return(null); } Job job = new Job(this.def.jobDef, list[0]); job.targetQueueA = new List <LocalTargetInfo>(); for (int i = 1; i < list.Count; i++) { job.targetQueueA.Add(list[i]); } job.locomotionUrgency = LocomotionUrgency.Walk; return(job); }
public override Job TryGiveJob(Pawn pawn) { if (PawnUtility.WillSoonHaveBasicNeed(pawn)) { return(null); } Predicate <IntVec3> cellValidator = (IntVec3 x) => !PawnUtility.KnownDangerAt(x, pawn.Map, pawn) && !x.GetTerrain(pawn.Map).avoidWander&& x.Standable(pawn.Map) && x.SupportsStructureType(pawn.Map, TerrainAffordanceDefOf.Diggable); Predicate <Region> validator = delegate(Region x) { IntVec3 intVec; return(!x.IsForbiddenEntirely(pawn) && x.TryFindRandomCellInRegionUnforbidden(pawn, cellValidator, out intVec)); }; Region reg; if (!CellFinder.TryFindClosestRegionWith(pawn.GetRegion(RegionType.Set_Passable), TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), validator, 500, out reg, RegionType.Set_Passable)) { return(null); } IntVec3 root; if (!reg.TryFindRandomCellInRegionUnforbidden(pawn, cellValidator, out root)) { return(null); } List <IntVec3> list; if (!WalkPathFinder.TryFindWalkPath(pawn, root, out list)) { return(null); } Job job = new Job(this.def.jobDef, list[0]); job.targetQueueA = new List <LocalTargetInfo>(); job.targetQueueA.Add(list[0]); job.locomotionUrgency = LocomotionUrgency.Walk; return(job); }
/// <summary> /// Tries to give a job to the given pawn. /// </summary> /// <param name="pawn">The pawn.</param> /// <returns></returns> public override Job TryGiveJob(Pawn pawn) { if (!JoyUtility.EnjoyableOutsideNow(pawn, null)) { return(null); } if (PawnUtility.WillSoonHaveBasicNeed(pawn)) { return(null); } if (!def.IsValidFor(pawn)) { return(null); } var allProductionComps = pawn.health.hediffSet.hediffs.Select(h => h.TryGetComp <Comp_TerrainProduction>()?.Props) .Where(p => p != null) .ToList(); if (allProductionComps.Count == 0) { return(null); } bool IsValidCell(IntVec3 cell) { if (PawnUtility.KnownDangerAt(cell, pawn.Map, pawn)) { return(false); } var terrain = cell.GetTerrain(pawn.Map); if (terrain == null) { return(false); } if (!allProductionComps.Any(p => p.CanProduceOn(terrain))) { return(false); } return(cell.Standable(pawn.Map)); } bool IsValidRegion(Region region) { if (region.IsForbiddenEntirely(pawn)) { return(false); } return(region.TryFindRandomCellInRegionUnforbidden(pawn, IsValidCell, out IntVec3 _)); } if (!CellFinder.TryFindClosestRegionWith(pawn.GetRegion(RegionType.Set_Passable), TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn), IsValidRegion, 100, out Region reg, RegionType.Set_Passable)) { return(null); } if (!reg.TryFindRandomCellInRegionUnforbidden(pawn, IsValidCell, out IntVec3 root)) { return(null); } if (!WalkPathFinder.TryFindWalkPath(pawn, root, out var result)) { return(null); } Job job = new Job(def.jobDef, result[0]) { targetQueueA = new List <LocalTargetInfo>() }; for (int i = 1; i < result.Count; i++) { job.targetQueueA.Add(result[i]); } job.locomotionUrgency = LocomotionUrgency.Walk; return(job); }
// Token: 0x06000568 RID: 1384 RVA: 0x00035040 File Offset: 0x00033440 public override Job TryGiveJob(Pawn pawn) { string IsCurrentWeatherClear = "Null"; if (pawn.Map.weatherManager.curWeather != null) { IsCurrentWeatherClear = pawn.Map.weatherManager.curWeather.ToString(); } if (IsCurrentWeatherClear != "Clear") { return(null); } float CurrentCelestialGlow = GenCelestial.CurCelestialSunGlow(pawn.Map); if (CurrentCelestialGlow <= 0.4f) { return(null); } /* * if (GenLocalDate.DayPercent(pawn.Map) < 0.5f) * { * return null; * } */ if (!JoyUtility.EnjoyableOutsideNow(pawn, null)) { return(null); } if (PawnUtility.WillSoonHaveBasicNeed(pawn)) { return(null); } Predicate <IntVec3> cellValidator = (IntVec3 x) => !PawnUtility.KnownDangerAt(x, pawn.Map, pawn) && !x.GetTerrain(pawn.Map).avoidWander&& x.Standable(pawn.Map) && !x.Roofed(pawn.Map); Predicate <Region> validator = delegate(Region x) { IntVec3 intVec; return(x.Room.PsychologicallyOutdoors && !x.IsForbiddenEntirely(pawn) && x.TryFindRandomCellInRegionUnforbidden(pawn, cellValidator, out intVec)); }; Region reg; if (!CellFinder.TryFindClosestRegionWith(pawn.GetRegion(RegionType.Set_Passable), TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), validator, 100, out reg, RegionType.Set_Passable)) { return(null); } IntVec3 root; if (!reg.TryFindRandomCellInRegionUnforbidden(pawn, cellValidator, out root)) { return(null); } List <IntVec3> list; if (!WalkPathFinder.TryFindWalkPath(pawn, root, out list)) { return(null); } Job job = new Job(this.def.jobDef, list[0]); job.targetQueueA = new List <LocalTargetInfo>(); for (int i = 1; i < list.Count; i++) { job.targetQueueA.Add(list[i]); } job.locomotionUrgency = LocomotionUrgency.Walk; return(job); }
public override Job TryGiveJob(Pawn pawn) { if (PawnUtility.WillSoonHaveBasicNeed(pawn)) { return(null); } Predicate <IntVec3> cellValidator = (IntVec3 x) => !PawnUtility.KnownDangerAt(x, pawn.Map, pawn) && !x.GetTerrain(pawn.Map).avoidWander&& x.Standable(pawn.Map) && x.CloseToEdge(pawn.Map, 5); Predicate <Region> validator = delegate(Region x) { IntVec3 intVec; return(x.Room.PsychologicallyOutdoors && x.TryFindRandomCellInRegionUnforbidden(pawn, cellValidator, out intVec)); }; Region reg; if (!CellFinder.TryFindClosestRegionWith(pawn.GetRegion(RegionType.Set_Passable), TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), validator, 500, out reg, RegionType.Set_Passable)) { return(null); } IntVec3 root; if (!reg.TryFindRandomCellInRegionUnforbidden(pawn, cellValidator, out root)) { return(null); } List <IntVec3> list; if (!WalkPathFinder.TryFindWalkPath(pawn, root, out list)) { return(null); } IntVec3 root2; if (!reg.TryFindRandomCellInRegionUnforbidden(pawn, cellValidator, out root2)) { return(null); } List <IntVec3> list2; if (!WalkPathFinder.TryFindWalkPath(pawn, root2, out list2)) { return(null); } IntVec3 root4; if (!reg.TryFindRandomCellInRegionUnforbidden(pawn, cellValidator, out root4)) { return(null); } List <IntVec3> list4; if (!WalkPathFinder.TryFindWalkPath(pawn, root4, out list4)) { return(null); } IntVec3 root5; if (!reg.TryFindRandomCellInRegionUnforbidden(pawn, cellValidator, out root5)) { return(null); } List <IntVec3> list5; if (!WalkPathFinder.TryFindWalkPath(pawn, root4, out list5)) { return(null); } Job job = new Job(this.def.jobDef, list[0]); job.targetQueueA = new List <LocalTargetInfo>(); //can't figure out how to get hte pawn to wait so this has them sit for an extra tick. sadly not more than that. list[1] = list[0]; list[2] = list2[0]; list[3] = list2[0]; list[4] = list4[0]; list[5] = list4[0]; list[6] = list5[0]; list[7] = list5[0]; job.targetQueueA.Add(list[0]); job.targetQueueA.Add(list[1]); job.targetQueueA.Add(list[2]); job.targetQueueA.Add(list[3]); job.targetQueueA.Add(list[4]); job.targetQueueA.Add(list[5]); job.targetQueueA.Add(list[6]); job.targetQueueA.Add(list[7]); /* adding this made htem go back to the start again. its intersting. still nots rue how this translates to wandering only in water * for (int i = 1; i < list.Count; i++) * { * job.targetQueueA.Add(list[i]); * } */ job.locomotionUrgency = LocomotionUrgency.Sprint; return(job); }