private void TryDoDeteriorate(Thing t, bool roofed, bool roomUsesOutdoorTemperature, bool protectedByEdifice, TerrainDef terrain) { Corpse corpse = t as Corpse; if (corpse != null && corpse.InnerPawn.apparel != null) { List <Apparel> wornApparel = corpse.InnerPawn.apparel.WornApparel; for (int i = 0; i < wornApparel.Count; i++) { this.TryDoDeteriorate(wornApparel[i], roofed, roomUsesOutdoorTemperature, protectedByEdifice, terrain); } } float num = SteadyEnvironmentEffects.FinalDeteriorationRate(t, roofed, roomUsesOutdoorTemperature, protectedByEdifice, terrain, null); if (num < 0.001f) { return; } float chance = this.deteriorationRate * num / 36f; if (Rand.Chance(chance)) { t.TakeDamage(new DamageInfo(DamageDefOf.Deterioration, 1f, 0f, -1f, null, null, null, DamageInfo.SourceCategory.ThingOrUnknown, null)); } }
public static float FinalDeteriorationRate(Thing t, List <string> reasons = null) { if (t.Spawned) { Room room = t.GetRoom(RegionType.Set_Passable); return(SteadyEnvironmentEffects.FinalDeteriorationRate(t, t.Position.Roofed(t.Map), room != null && room.UsesOutdoorTemperature, SteadyEnvironmentEffects.ProtectedByEdifice(t.Position, t.Map), t.Position.GetTerrain(t.Map), reasons)); } return(SteadyEnvironmentEffects.FinalDeteriorationRate(t, false, false, false, null, reasons)); }