// // 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); }
// // 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); }
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); }
// // 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); }
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); }
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)); }