Example #1
0
        public virtual bool Accepts(Thing thing)
        {
            if (itemFilterComp == null || itemFilterComp.NotSet || itemFilterComp.AcceptsHowMany(thing) > 0)
            {
                return(innerContainer.CanAcceptAnyOf(thing, true));
            }

            return(false);
        }
Example #2
0
        public override Job JobOnThing(Pawn pawn, Thing thing, bool forced = false)
        {
            if (!HaulAIUtility.PawnCanAutomaticallyHaul(pawn, thing, forced) ||
                !pawn.CanReserve(thing, 1, -1, null, forced) ||
                thing.IsForbidden(pawn) ||
                thing.IsBurning())
            {
                return(null);
            }

            if (pawn.Map.designationManager.DesignationOn(thing, DefDatabase <DesignationDef> .GetNamed("HaulToEnchant")) == null)
            {
                return(null);
            }

            foreach (Building building in pawn.Map.listerBuildings.allBuildingsColonist)
            {
                if (!(building is Building_ProductionResearchBench_InternalRecipes))
                {
                    continue;
                }

                CompInnerContainerItemFilter filter = building.GetComp <CompInnerContainerItemFilter>();
                int quantity = -1;
                if (filter == null)
                {
                    continue;
                }

                quantity = filter.AcceptsHowMany(thing);
                if (quantity <= 0)
                {
                    continue;
                }

                if (!pawn.CanReserveAndReach(building, PathEndMode.Touch, pawn.NormalMaxDanger(), 1, -1, null, false))
                {
                    continue;
                }

                Job job = HaulAIUtility_Helper.HaulToBuildingJob(pawn, thing, building, quantity);
                if (job != null)
                {
                    return(job);
                }
            }

            JobFailReason.Is(NoEnchantingBuildingsWithSufficientStorageFoundTrans);
            return(null);
        }