// Token: 0x060005B7 RID: 1463 RVA: 0x00037A28 File Offset: 0x00035E28 protected override Job TryGiveJob(Pawn pawn) { Comp_Facehugger _Facehugger = pawn.TryGetComp <Comp_Facehugger>(); bool selected = Find.Selector.SingleSelectedThing == pawn; if (pawn.TryGetAttackVerb(null, false) == null) { return(null); } Pawn pawn2 = FindPawnTarget(pawn); // Pawn pawn2 = BestPawnToHuntForPredator(pawn, forceScanWholeMap); if (pawn2 != null && !pawn2.Dead && _Facehugger.Impregnations < _Facehugger.maxImpregnations && pawn2.isPotentialHost() && pawn.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) { #if DEBUG if (pawn.jobs.debugLog) { pawn.jobs.DebugLogEvent(string.Format("{0}@{1} hunting {2}@{3}", pawn.Label, pawn.Position, pawn2.Label, pawn2.Position)); } #endif return(this.MeleeAttackJob(pawn, pawn2)); } if (pawn2 != null && pawn2.isPotentialHost()) { using (PawnPath pawnPath = pawn.Map.pathFinder.FindPath(pawn.Position, pawn2.Position, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.PassDoors, false), PathEndMode.OnCell)) { if (!pawnPath.Found) { return(null); } if (!pawnPath.TryFindLastCellBeforeBlockingDoor(pawn, out IntVec3 loc)) { Log.Error(pawn + " did TryFindLastCellBeforeDoor but found none when it should have been one. Target: " + pawn2.LabelCap, false); return(null); } IntVec3 randomCell = CellFinder.RandomRegionNear(loc.GetRegion(pawn.Map, RegionType.Set_Passable), 9, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), null, null, RegionType.Set_Passable).RandomCell; if (randomCell == pawn.Position) { return(new Job(JobDefOf.Wait, 30, false)); } return(new Job(JobDefOf.Goto, randomCell)); } } return(null); }
// Token: 0x06000956 RID: 2390 RVA: 0x0004D678 File Offset: 0x0004BA78 protected override bool Satisfied(Pawn pawn) { Comp_Facehugger _Facehugger = pawn.TryGetComp <Comp_Facehugger>(); return(_Facehugger.Impregnations < _Facehugger.maxImpregnations); }