Exemple #1
0
        protected override Job TryGiveTerminalJob(Pawn pawn)
        {
            WorkGiver_Scanner   scanner    = new WorkGiver_Miner();
            TargetInfo          targetInfo = TargetInfo.Invalid;
            Predicate <Thing>   predicate  = (Thing t) => !t.IsForbidden(pawn) && scanner.HasJobOnThing(pawn, t);
            IEnumerable <Thing> enumerable = scanner.PotentialWorkThingsGlobal(pawn);
            Thing thing;

            if (scanner.Prioritized)
            {
                IEnumerable <Thing> enumerable2 = enumerable;
                if (enumerable2 == null)
                {
                    enumerable2 = Find.ListerThings.ThingsMatching(scanner.PotentialWorkThingRequest);
                }
                Predicate <Thing> validator = predicate;
                thing = GenClosest.ClosestThing_Global_Reachable(pawn.Position, enumerable2, scanner.PathEndMode, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator, (Thing x) => scanner.GetPriority(pawn, x));
            }
            else
            {
                Predicate <Thing> validator = predicate;
                thing = GenClosest.ClosestThingReachable(pawn.Position, scanner.PotentialWorkThingRequest, scanner.PathEndMode, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator, enumerable, scanner.LocalRegionsToScanFirst, enumerable != null);
            }
            if (thing != null)
            {
                targetInfo = thing;
                //workGiver_Scanner = scanner;
            }
            if (targetInfo.HasThing)
            {
                WorkGiver_Miner miner = new WorkGiver_Miner();
                return(miner.JobOnThing(pawn, targetInfo.Thing));
            }
            return(null);
        }