Пример #1
0
        public bool Get_RegionProcessor(Region r)
        {
            List <Thing> thingList = r.ListerThings.ThingsMatching(ThingRequest.ForGroup(ThingRequestGroup.HaulableEver));

            for (int index = 0; index < thingList.Count; ++index)
            {
                Thing thing = thingList[index];
                if (!processedThings.Contains(thing) && ReachabilityWithinRegion.ThingFromRegionListerReachable(
                        thing, r, PathEndMode.ClosestTouch, pawn) && (baseValidator(thing) && !(thing.def.IsMedicine & billGiverIsPawn)))
                {
                    newRelevantThings.Add(thing);
                    processedThings.Add(thing);
                }
            }
            ++regionsProcessed;
            if (newRelevantThings.Count > 0 && regionsProcessed > adjacentRegionsAvailable)
            {
                relevantThings.AddRange(newRelevantThings);
                newRelevantThings.Clear();
                if (WorkGiver_DoBill_Patch.TryFindBestBillIngredientsInSet2(relevantThings, bill, chosen, rootCell, billGiverIsPawn, ingredientsOrdered))
                {
                    foundAll = true;
                    return(true);
                }
            }
            return(false);
        }
Пример #2
0
        public bool Get_RegionProcessor(Region r)
        {
            RecipeDef recipe = bill.recipe;

            thingDefValues = RimThreaded.recipeThingDefValues[recipe];
            foreach (float value in RimThreaded.sortedRecipeValues[recipe])
            {
                foreach (ThingDef thingDef in thingDefValues[value])
                {
                    thingList = r.ListerThings.ThingsOfDef(thingDef);
                    for (int index = 0; index < thingList.Count; ++index)
                    {
                        Thing thing = thingList[index];
                        if (!processedThings.Contains(thing) && ReachabilityWithinRegion.ThingFromRegionListerReachable(
                                thing, r, PathEndMode.ClosestTouch, pawn) && (baseValidator(thing) && !(thing.def.IsMedicine & billGiverIsPawn)))
                        {
                            newRelevantThings.Add(thing);
                            processedThings.Add(thing);
                        }
                    }
                }
            }
            ++regionsProcessed;
            if (newRelevantThings.Count > 0 && regionsProcessed > adjacentRegionsAvailable)
            {
                relevantThings.AddRange(newRelevantThings);
                newRelevantThings.Clear();
                if (WorkGiver_DoBill_Patch.TryFindBestBillIngredientsInSet2(relevantThings, bill, chosen, rootCell, billGiverIsPawn, ingredientsOrdered))
                {
                    foundAll = true;
                    return(true);
                }
            }

            return(false);
        }