Esempio n. 1
0
 public static void GetOptimalHediffsToTendWithSingleTreatment(Pawn patient, bool usingMedicine, List <Hediff> outHediffsToTend, List <Hediff> tendableHediffsInTendPriorityOrder = null)
 {
     outHediffsToTend.Clear();
     TendUtility.tmpHediffs.Clear();
     if (tendableHediffsInTendPriorityOrder != null)
     {
         TendUtility.tmpHediffs.AddRange(tendableHediffsInTendPriorityOrder);
     }
     else
     {
         List <Hediff> hediffs = patient.health.hediffSet.hediffs;
         for (int i = 0; i < hediffs.Count; i++)
         {
             if (hediffs[i].TendableNow)
             {
                 TendUtility.tmpHediffs.Add(hediffs[i]);
             }
         }
         TendUtility.SortByTendPriority(TendUtility.tmpHediffs);
     }
     if (TendUtility.tmpHediffs.Any())
     {
         Hediff hediff = TendUtility.tmpHediffs[0];
         outHediffsToTend.Add(hediff);
         HediffCompProperties_TendDuration hediffCompProperties_TendDuration = hediff.def.CompProps <HediffCompProperties_TendDuration>();
         if (hediffCompProperties_TendDuration != null && hediffCompProperties_TendDuration.tendAllAtOnce)
         {
             for (int j = 0; j < TendUtility.tmpHediffs.Count; j++)
             {
                 if (TendUtility.tmpHediffs[j] != hediff && TendUtility.tmpHediffs[j].def == hediff.def)
                 {
                     outHediffsToTend.Add(TendUtility.tmpHediffs[j]);
                 }
             }
         }
         else if (hediff is Hediff_Injury && usingMedicine)
         {
             float num = hediff.Severity;
             for (int k = 0; k < TendUtility.tmpHediffs.Count; k++)
             {
                 if (TendUtility.tmpHediffs[k] != hediff)
                 {
                     Hediff_Injury hediff_Injury = TendUtility.tmpHediffs[k] as Hediff_Injury;
                     if (hediff_Injury != null)
                     {
                         float severity = hediff_Injury.Severity;
                         if (num + severity <= 20.0)
                         {
                             num += severity;
                             outHediffsToTend.Add(hediff_Injury);
                         }
                     }
                 }
             }
         }
         TendUtility.tmpHediffs.Clear();
     }
 }
Esempio n. 2
0
        public static int GetMedicineCountToFullyHeal(Pawn pawn)
        {
            int num  = 0;
            int num2 = pawn.health.hediffSet.hediffs.Count + 1;

            Medicine.tendableHediffsInTendPriorityOrder.Clear();
            List <Hediff> hediffs = pawn.health.hediffSet.hediffs;

            for (int i = 0; i < hediffs.Count; i++)
            {
                if (hediffs[i].TendableNow(false))
                {
                    Medicine.tendableHediffsInTendPriorityOrder.Add(hediffs[i]);
                }
            }
            TendUtility.SortByTendPriority(Medicine.tendableHediffsInTendPriorityOrder);
            int num3 = 0;

            while (true)
            {
                num++;
                if (num > num2)
                {
                    break;
                }
                TendUtility.GetOptimalHediffsToTendWithSingleTreatment(pawn, true, Medicine.tmpHediffs, Medicine.tendableHediffsInTendPriorityOrder);
                if (!Medicine.tmpHediffs.Any <Hediff>())
                {
                    goto IL_F8;
                }
                num3++;
                for (int j = 0; j < Medicine.tmpHediffs.Count; j++)
                {
                    Medicine.tendableHediffsInTendPriorityOrder.Remove(Medicine.tmpHediffs[j]);
                }
            }
            Log.Error("Too many iterations.", false);
IL_F8:
            Medicine.tmpHediffs.Clear();
            Medicine.tendableHediffsInTendPriorityOrder.Clear();
            return(num3);
        }
Esempio n. 3
0
        public static int GetMedicineCountToFullyHeal(Pawn pawn)
        {
            int num  = 0;
            int num2 = pawn.health.hediffSet.hediffs.Count + 1;

            tendableHediffsInTendPriorityOrder.Clear();
            List <Hediff> hediffs = pawn.health.hediffSet.hediffs;

            for (int i = 0; i < hediffs.Count; i++)
            {
                if (hediffs[i].TendableNow())
                {
                    tendableHediffsInTendPriorityOrder.Add(hediffs[i]);
                }
            }
            TendUtility.SortByTendPriority(tendableHediffsInTendPriorityOrder);
            int num3 = 0;

            while (true)
            {
                num++;
                if (num > num2)
                {
                    Log.Error("Too many iterations.");
                    break;
                }
                TendUtility.GetOptimalHediffsToTendWithSingleTreatment(pawn, usingMedicine: true, tmpHediffs, tendableHediffsInTendPriorityOrder);
                if (!tmpHediffs.Any())
                {
                    break;
                }
                num3++;
                for (int j = 0; j < tmpHediffs.Count; j++)
                {
                    tendableHediffsInTendPriorityOrder.Remove(tmpHediffs[j]);
                }
            }
            tmpHediffs.Clear();
            tendableHediffsInTendPriorityOrder.Clear();
            return(num3);
        }