protected override bool RegionProcessor(Region r) { if (BestMixUtility.BMixRegionIsInRange(r, P_billGiver, P_bill)) { Predicate <Thing> BMixValidator = BestMixUtility.BestMixValidator(P_pawn, P_billGiver, P_bill); List <Thing> list = r.ListerThings.ThingsMatching(ThingRequest.ForGroup(ThingRequestGroup.HaulableEver)); for (var i = 0; i < list.Count; i++) { Thing thing = list[i]; if (!BestMixUtility.BMIsForbidden(thing)) { if (!ProcessedThings.Contains(thing) && ReachabilityWithinRegion.ThingFromRegionListerReachable(thing, r, PathEndMode.ClosestTouch, P_pawn) && BMixValidator(thing) && (!thing.def.IsMedicine || (!(P_billGiver is Pawn)))) { NewRelevantThings.Add(thing); ProcessedThings.Add(thing); } } } Lf_regionsProcessed++; if (NewRelevantThings.Count > 0 && Lf_regionsProcessed > Lf_adjacentRegionsAvailable) { Comparison <Thing> comparison = BestMixUtility.GetBMixComparer(P_billGiver, Lf_rootCell, P_bill, out var rnd); //newRelevantThings.Sort(comparison); RelevantThings.AddRange(NewRelevantThings); if (rnd) { RelevantThings.Shuffle(); } else { RelevantThings.Sort(comparison); } BestMixUtility.BMixDebugList(RelevantThings, P_billGiver, Lf_rootCell, P_bill); NewRelevantThings.Clear(); if (BestMixUtility.TryFindBestMixInSet(RelevantThings, P_bill, P_chosen, IngredientsOrdered)) { Lf_foundAll = true; var finishNow = BestMixUtility.BMixFinishedStatus(Lf_foundAll, P_billGiver, P_bill); if (Lf_foundAll && finishNow) { BestMixUtility.DebugChosenList(P_billGiver, P_chosen); BestMixUtility.DebugFoundAll(P_billGiver, Lf_foundAll); return(true); } } } } BestMixUtility.DebugChosenList(P_billGiver, P_chosen); BestMixUtility.DebugFoundAll(P_billGiver, Lf_foundAll); return(false); }
protected override bool RegionProcessor(Region r) { if (BestMixUtility.BMixRegionIsInRange(r, p_billGiver, p_bill)) { Predicate <Thing> BMixValidator = BestMixUtility.BestMixValidator(p_pawn, p_billGiver, p_bill); List <Thing> list = r.ListerThings.ThingsMatching(ThingRequest.ForGroup(ThingRequestGroup.HaulableEver)); for (int i = 0; i < list.Count; i++) { Thing thing = list[i]; if (!processedThings.Contains(thing) && ReachabilityWithinRegion.ThingFromRegionListerReachable(thing, r, PathEndMode.ClosestTouch, p_pawn) && BMixValidator(thing) && (!thing.def.IsMedicine || (!(p_billGiver is Pawn)))) { newRelevantThings.Add(thing); processedThings.Add(thing); } } lf_regionsProcessed++; if (newRelevantThings.Count > 0 && lf_regionsProcessed > lf_adjacentRegionsAvailable) { Comparison <Thing> comparison = BestMixUtility.GetBMixComparer(p_billGiver, lf_rootCell); //newRelevantThings.Sort(comparison); relevantThings.AddRange(newRelevantThings); relevantThings.Sort(comparison); BestMixUtility.BMixDebugList(relevantThings, p_billGiver, lf_rootCell); newRelevantThings.Clear(); if (BestMixUtility.TryFindBestMixInSet(relevantThings, p_bill, p_chosen, ingredientsOrdered)) { lf_foundAll = true; bool finishNow = BestMixUtility.BMixFinishedStatus(lf_foundAll, p_billGiver); if ((lf_foundAll) && (finishNow)) { BestMixUtility.DebugChosenList(p_billGiver, p_chosen); BestMixUtility.DebugFoundAll(p_billGiver, lf_foundAll); return(true); } } } } BestMixUtility.DebugChosenList(p_billGiver, p_chosen); BestMixUtility.DebugFoundAll(p_billGiver, lf_foundAll); return(false); }