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