示例#1
0
        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);
        }
示例#2
0
        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);
        }