public override Job JobOnThing(Pawn pawn, Thing t, bool forced)
        {
            Building_FermentingVat building_FermentingVat = (Building_FermentingVat)t;
            Thing t2 = this.FindInputThing(pawn, building_FermentingVat);

            return(new Job(JobDefToUse, t, t2)
            {
                count = building_FermentingVat.SpaceLeftForInput
            });
        }
Пример #2
0
        public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced)
        {
            Building_FermentingVat building_FermentingVat = t as Building_FermentingVat;

            WorkGiverDynamicDef dyn_def = def as WorkGiverDynamicDef;

            if (dyn_def != null && dyn_def.outputThingDef != null)
            {
                if (building_FermentingVat.def != dyn_def.outputThingDef)
                {
                    return(false);
                }
            }

            return(building_FermentingVat != null && building_FermentingVat.Fermented && !t.IsBurning() && !t.IsForbidden(pawn) && pawn.CanReserveAndReach(t, PathEndMode.Touch, pawn.NormalMaxDanger(), 1));
        }
        private Thing FindInputThing(Pawn pawn, Building_FermentingVat barrel)
        {
            Predicate <Thing> predicate = (Thing x) => !x.IsForbidden(pawn) && pawn.CanReserve(x, 1);
            Predicate <Thing> validator = predicate;

            ThingDef input_def = null;

            ExtraThingDef extra_def = barrel.def as ExtraThingDef;

            if (extra_def != null && extra_def.vatProperties != null)
            {
                input_def = extra_def.vatProperties.inputThingDef;
            }

            return(GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, ThingRequest.ForDef(input_def), PathEndMode.ClosestTouch, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator, null, 0, -1, false, RegionType.Set_Passable, false));
        }
        public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced)
        {
            Building_FermentingVat building_FermentingVat = t as Building_FermentingVat;

            if (building_FermentingVat == null || building_FermentingVat.Fermented || building_FermentingVat.SpaceLeftForInput <= 0)
            {
                return(false);
            }
            float temperature = building_FermentingVat.Position.GetTemperature(building_FermentingVat.Map);
            CompProperties_TemperatureRuinable compProperties = building_FermentingVat.def.GetCompProperties <CompProperties_TemperatureRuinable>();

            if (temperature < compProperties.minSafeTemperature + 2f || temperature > compProperties.maxSafeTemperature - 2f)
            {
                Reset();
                JobFailReason.Is(TemperatureTrans);
                return(false);
            }
            if (t.IsForbidden(pawn) || !pawn.CanReserveAndReach(t, PathEndMode.Touch, pawn.NormalMaxDanger(), 1))
            {
                return(false);
            }
            if (pawn.Map.designationManager.DesignationOn(t, DesignationDefOf.Deconstruct) != null)
            {
                return(false);
            }
            if (this.FindInputThing(pawn, building_FermentingVat) == null)
            {
                Reset();
                JobFailReason.Is(NoInputTrans);
                return(false);
            }
            WorkGiverDynamicDef dyn_def = def as WorkGiverDynamicDef;

            if (dyn_def != null && dyn_def.inputThingDef != null)
            {
                if (building_FermentingVat.def != dyn_def.inputThingDef)
                {
                    return(false);
                }
            }

            return(!t.IsBurning());
        }