public bool AnyPawnOutOfFood(out string malnutritionHediff) { tmpInvFood.Clear(); List <Thing> list = CaravanInventoryUtility.AllInventoryItems(caravan); for (int i = 0; i < list.Count; i++) { if (list[i].def.IsNutritionGivingIngestible) { tmpInvFood.Add(list[i]); } } List <Pawn> pawnsListForReading = caravan.PawnsListForReading; for (int j = 0; j < pawnsListForReading.Count; j++) { Pawn pawn = pawnsListForReading[j]; if (!pawn.RaceProps.EatsFood || VirtualPlantsUtility.CanEatVirtualPlantsNow(pawn)) { continue; } bool flag = false; for (int k = 0; k < tmpInvFood.Count; k++) { if (CaravanPawnsNeedsUtility.CanEatForNutritionEver(tmpInvFood[k].def, pawn)) { flag = true; break; } } if (flag) { continue; } int num = -1; string text = null; for (int l = 0; l < pawnsListForReading.Count; l++) { Hediff firstHediffOfDef = pawnsListForReading[l].health.hediffSet.GetFirstHediffOfDef(HediffDefOf.Malnutrition); if (firstHediffOfDef != null && (text == null || firstHediffOfDef.CurStageIndex > num)) { num = firstHediffOfDef.CurStageIndex; text = firstHediffOfDef.LabelCap; } } malnutritionHediff = text; tmpInvFood.Clear(); return(true); } malnutritionHediff = null; tmpInvFood.Clear(); return(false); }
private float GetFoodScore(Pawn pawn, Thing food, List <Pair <int, int> > ticksToArrive) { if (!CaravanPawnsNeedsUtility.CanEatForNutritionEver(food.def, pawn) || !food.def.ingestible.canAutoSelectAsFoodForCaravan) { return(0f); } float num = CaravanPawnsNeedsUtility.GetFoodScore(food.def, pawn, food.GetStatValue(StatDefOf.Nutrition)); CompRottable compRottable = food.TryGetComp <CompRottable>(); if (compRottable != null && compRottable.Active && DaysUntilRotCalculator.ApproxTicksUntilRot_AssumeTimePassesBy(compRottable, CurrentTile, ticksToArrive) < ticksToArrive.Last().Second) { num *= 0.1f; } return(num); }