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); }
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); }