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