private static bool ShouldRandomSurgeryInjuriesAvoidDestroying(BodyPartRecord part, Pawn pawn)
        {
            bool result;

            if (part == pawn.RaceProps.body.corePart)
            {
                result = true;
            }
            else if (part.def.tags.Any((BodyPartTagDef x) => x.vital))
            {
                result = true;
            }
            else
            {
                for (int i = 0; i < part.parts.Count; i++)
                {
                    if (HealthUtility.ShouldRandomSurgeryInjuriesAvoidDestroying(part.parts[i], pawn))
                    {
                        return(true);
                    }
                }
                result = false;
            }
            return(result);
        }
Esempio n. 2
0
        private static float GetMinHealthOfPartsWeWantToAvoidDestroying(BodyPartRecord part, Pawn pawn)
        {
            float num = 999999f;

            while (part != null)
            {
                if (HealthUtility.ShouldRandomSurgeryInjuriesAvoidDestroying(part, pawn))
                {
                    num = Mathf.Min(num, pawn.health.hediffSet.GetPartHealth(part));
                }
                part = part.parent;
            }
            return(num);
        }
Esempio n. 3
0
 private static bool ShouldRandomSurgeryInjuriesAvoidDestroying(BodyPartRecord part, Pawn pawn)
 {
     if (part == pawn.RaceProps.body.corePart)
     {
         return(true);
     }
     if (part.def.tags.Any((string x) => HealthUtility.vitalPawnCapacityTags.Contains(x)))
     {
         return(true);
     }
     for (int i = 0; i < part.parts.Count; i++)
     {
         if (HealthUtility.ShouldRandomSurgeryInjuriesAvoidDestroying(part.parts[i], pawn))
         {
             return(true);
         }
     }
     return(false);
 }