Beispiel #1
0
        //
        // Methods
        //
        public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            Pawn pawn2 = t as Pawn;

            if (pawn2 == null || pawn2 == pawn)
            {
                return(false);
            }
            if (!pawn2.RaceProps.Humanlike || pawn2.ageTracker.CurLifeStageIndex > AgeStage.Toddler)
            {
                return(false);
            }
            if (pawn2.needs.food == null || pawn2.needs.food.CurLevelPercentage > pawn2.needs.food.PercentageThreshHungry + 0.02)
            {
                return(false);
            }
            if (!pawn2.InBed())
            {
                return(false);
            }
            if (!FeedPatientUtility.ShouldBeFed(pawn2))
            {
                return(false);
            }
            if (!pawn.CanReserveAndReach(t, PathEndMode.ClosestTouch, Danger.Deadly, 1, -1, null, forced))
            {
                return(false);
            }
            if (!ChildrenUtility.CanBreastfeed(pawn))
            {
                JobFailReason.Is("ReasonCannotBreastfeed".Translate(pawn.LabelShort));
                return(false);
            }
            return(true);
        }
Beispiel #2
0
        //
        // Methods
        //
        public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            Pawn pawn2 = t as Pawn;

            // Make sure pawn can actually breastfeed before wasting time checking anything else
            if (!ChildrenUtility.CanBreastfeed(pawn))
            {
                return(false);
            }
            if (pawn2 == null || pawn2 == pawn)
            {
                return(false);
            }
            if (!pawn2.RaceProps.Humanlike)
            {
                return(false);
            }
            if (pawn2.needs.food == null || pawn2.needs.food.CurLevelPercentage > pawn2.needs.food.PercentageThreshHungry + 0.02)
            {
                return(false);
            }
            if (!FeedPatientUtility.ShouldBeFed(pawn2))
            {
                return(false);
            }
            if (!pawn.CanReserveAndReach(t, PathEndMode.ClosestTouch, Danger.Deadly, 1, -1, null, forced))
            {
                return(false);
            }
            return(true);
        }
Beispiel #3
0
        public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            Pawn taker = pawn;
            Pawn giver = t as Pawn;

            // 与える相手が人でない、自分自身に与える→×
            if (giver == null || giver == taker)
            {
                return(false);
            }

            // 人間のような食事の与え方をする仕事だが、与える相手が人間ではない→×
            if (this.def.feedHumanlikesOnly && !giver.RaceProps.Humanlike)
            {
                return(false);
            }

            // 動物のような食事の与え方をする仕事だが、与える相手が動物ではない→×
            if (this.def.feedAnimalsOnly && !giver.RaceProps.Animal)
            {
                return(false);
            }

            // 与える相手が水分要求を持っているが、喉が渇いていると感じていない→×
            if (giver.needs.water() == null || giver.needs.water().CurLevelPercentage > giver.needs.water().PercentageThreshSlightlyThirsty + 0.02f)
            {
                return(false);
            }

            // 与える相手の状態が、誰かに食事を与えてもらうべき状態ではない→×
            if (!FeedPatientUtility.ShouldBeFed(giver))
            {
                return(false);
            }

            // 給仕者が与える相手を「予約可能&到達可能」ではない→×
            if (!taker.CanReserveAndReach(t, PathEndMode.ClosestTouch, Danger.Deadly, 1, -1, null, forced))
            {
                return(false);
            }

            if (MizuUtility.TryFindBestWaterSourceFor(taker, giver, true, false) == null)
            {
                // 与えられる水があるか探したが見つからなかった
                JobFailReason.Is(MizuStrings.JobFailReasonNoWater.Translate());
                return(false);
            }

            return(true);
        }
Beispiel #4
0
        //
        // Methods
        //
        public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            Pawn pawn2 = t as Pawn;

            if (pawn2 == null || pawn2 == pawn)
            {
                return(false);
            }
            if (!pawn2.RaceProps.Humanlike || pawn2.ageTracker.CurLifeStageIndex > AgeStage.Toddler)
            {
                return(false);
            }
            if (pawn2.needs.food == null || pawn2.needs.food.CurLevelPercentage > pawn2.needs.food.PercentageThreshHungry + 0.02)
            {
                return(false);
            }
            if (!pawn2.InBed())
            {
                return(false);
            }
            if (!FeedPatientUtility.ShouldBeFed(pawn2))
            {
                return(false);
            }
            if (!pawn.CanReserveAndReach(t, PathEndMode.ClosestTouch, Danger.Deadly, 1, -1, null, forced))
            {
                return(false);
            }
            Thing    thing;
            ThingDef thingDef;

            if (!FoodUtility.TryFindBestFoodSourceFor(pawn, pawn2, pawn2.needs.food.CurCategory == HungerCategory.UrgentlyHungry, out thing, out thingDef, false, true, false, false, false) && !ChildrenUtility.CanBreastfeed(pawn))
            {
                JobFailReason.Is("NoFood".Translate());
                return(false);
            }
            return(true);
        }
Beispiel #5
0
        public static bool get_SpawnedHungryPawns(MapPawns __instance, ref List <Pawn> __result)
        {
            if (spawnedHungryPawnsResult == null)
            {
                spawnedHungryPawnsResult = new List <Pawn>();
            }
            else
            {
                spawnedHungryPawnsResult.Clear();
            }
            List <Pawn> allPawnsSpawned = __instance.AllPawnsSpawned;

            for (int i = 0; i < allPawnsSpawned.Count; i++)
            {
                if (FeedPatientUtility.IsHungry(allPawnsSpawned[i]))
                {
                    spawnedHungryPawnsResult.Add(allPawnsSpawned[i]);
                }
            }

            __result = spawnedHungryPawnsResult;
            return(false);
        }
Beispiel #6
0
        public bool HasJobOnThing(Pawn pawn, Thing t)
        {
            Pawn pawn2 = t as Pawn;

            if (pawn2 == null || pawn2 == pawn)
            {
                return(false);
            }

            if (!FeedPatientUtility.IsHungry(pawn2))
            {
                return(false);
            }
            if (!FeedPatientUtility.ShouldBeFed(pawn2))
            {
                return(false);
            }
            if (!pawn.CanReserve(t, 1, -1, null))
            {
                return(false);
            }

            return(true);
        }
 public static bool ShouldBeFedBySomeone(Pawn pawn)
 {
     return(FeedPatientUtility.ShouldBeFed(pawn) || WardenFeedUtility.ShouldBeFed(pawn));
 }