private static int BestEverGetWaterIndexFor(List <ThingDefCount> water) { var num = -1; var num2 = 0f; for (var i = 0; i < water.Count; i++) { if (water[i].Count <= 0) { continue; } var thingDef = water[i].ThingDef; if (!MizuCaravanUtility.CanEverGetWater(thingDef)) { continue; } var waterScore = MizuCaravanUtility.GetWaterScore(thingDef); if (num >= 0 && !(waterScore > num2)) { continue; } num = i; num2 = waterScore; } return(num); }
private static int BestEverGetWaterIndexFor(Pawn pawn, List <ThingCount> water) { int num = -1; float num2 = 0f; for (int i = 0; i < water.Count; i++) { if (water[i].Count > 0) { ThingDef thingDef = water[i].ThingDef; if (MizuCaravanUtility.CanEverGetWater(thingDef, pawn)) { float waterScore = MizuCaravanUtility.GetWaterScore(thingDef, pawn); if (num < 0 || waterScore > num2) { num = i; num2 = waterScore; } } } } return(num); }
public static bool CanNowGetWater(Thing water, Pawn pawn) { return(!water.IngestibleNow && water.CanDrinkWaterNow() && MizuCaravanUtility.CanEverGetWater(water, pawn) && (pawn.needs.water().CurCategory >= ThirstCategory.Dehydration || water.GetWaterPreferability() > WaterPreferability.NeverDrink)); }
public static bool AnyPawnOutOfWater(Caravan c, out string worstDehydrationText) { // キャラバンの全所持品の水アイテムリスト作成 List <Thing> tmpInvWater = CaravanInventoryUtility.AllInventoryItems(c).FindAll((t) => t.CanGetWater()); bool allFoundWaterItem = true; // キャラバン内の全ポーンをチェック foreach (var pawn in c.PawnsListForReading) { // 水分要求なし→水不要 if (pawn.needs.water() == null) { continue; } // 心情ステータス無し、キャラバンの地形に水がある→アイテムがなくても水は飲める if (pawn.needs.mood == null && c.GetWaterTerrainType() != WaterTerrainType.NoWater) { continue; } // そのポーンが飲める水があるなら良し if (tmpInvWater.Exists((t) => MizuCaravanUtility.CanEverGetWater(t.def, pawn))) { continue; } // 適切な水アイテムを見つけられなかったポーンがいる allFoundWaterItem = false; break; } if (allFoundWaterItem) { // 全ポーンが水アイテムを見つけた // →脱水症状のテキストは不要 worstDehydrationText = null; return(false); } // 適切なアイテムを見つけられなかったポーンがいる // →全ポーンの脱水症状をチェックして最悪の状態を調査、そのテキストを取得 int maxHediffStageIndex = -1; string maxHediffText = null; foreach (var pawn in c.PawnsListForReading) { // 脱水症状の健康状態を持っているか var hediff = pawn.health.hediffSet.GetFirstHediffOfDef(MizuDef.Hediff_Dehydration, false); if (hediff == null) { continue; } if (maxHediffText == null || maxHediffStageIndex < hediff.CurStageIndex) { // 最悪状態なら更新 maxHediffStageIndex = hediff.CurStageIndex; maxHediffText = hediff.LabelCap; } } // 最悪の脱水症状テキストを返す worstDehydrationText = maxHediffText; return(true); }