public static string HoursInIdeal(CompDTemperatureIngestible comp, double changeThreshold) { return("\nWill remain in ideal range for around " + ThermodynamicsBase.HoursToTargetTemp(comp, changeThreshold).ToString("f1") + " hours more."); }
public override string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense) { string s = ""; if (!req.HasThing) { return(s); } CompDTemperature comp = req.Thing.TryGetComp <CompDTemperature>(); if (comp != null) { double interval = 2500; double ambient = comp.AmbientTemperature; double shift = ambient - comp.curTemp; double changeMag = Math.Abs(interval * shift / comp.PropsTemp.diffusionTime); double minStepScaled = CompDTemperature.minStep * interval; double step = (Math.Abs(shift) < minStepScaled || changeMag > CompDTemperature.minStep) ? changeMag : minStepScaled; if (step == minStepScaled) { s += "Currently coming to equilibrium at " + GenText.ToStringTemperatureOffset((float)ambient); } else { double result = Math.Sign(shift) * step * ThermodynamicsSettings.diffusionModifier; s += "Currently diffusing at a rate of " + GenText.ToStringTemperatureOffset((float)result) + " per hour."; s += HoursToAmbient(comp); CompDTemperatureIngestible comp2 = comp as CompDTemperatureIngestible; if (comp2 != null) { s += "\n"; if (comp2.PropsTemp.roomTemperature) { if (comp2.curTemp > comp2.PropsTemp.tempLevels.goodTemp && comp2.curTemp < comp2.PropsTemp.tempLevels.okTemp) { if (ambient < comp2.PropsTemp.tempLevels.goodTemp) { s += HoursInIdeal(comp2, comp2.PropsTemp.tempLevels.goodTemp); } else if (ambient > comp2.PropsTemp.tempLevels.okTemp) { s += HoursInIdeal(comp2, comp2.PropsTemp.tempLevels.okTemp); } else { s += InIdealRange(); } } else if (comp2.curTemp < comp2.PropsTemp.tempLevels.goodTemp && ambient > comp2.PropsTemp.tempLevels.goodTemp) { s += HoursToIdeal(comp2, comp2.PropsTemp.tempLevels.goodTemp); } else if (comp2.curTemp > comp2.PropsTemp.tempLevels.okTemp && ambient < comp2.PropsTemp.tempLevels.okTemp) { s += HoursToIdeal(comp2, comp2.PropsTemp.tempLevels.okTemp); } else { s += WillNeverReach(); } } else if (comp2.PropsTemp.likesHeat) { if (comp2.curTemp > comp2.PropsTemp.tempLevels.goodTemp) { if (ambient < comp2.PropsTemp.tempLevels.goodTemp) { s += HoursInIdeal(comp2, comp2.PropsTemp.tempLevels.goodTemp); } else { s += InIdealRange(); } } else if (ambient > comp2.PropsTemp.tempLevels.goodTemp) { s += HoursToIdeal(comp2, comp2.PropsTemp.tempLevels.goodTemp); } else { s += WillNeverReach(); } } else { if (comp2.curTemp < 0f && !comp2.PropsTemp.okFrozen) { if (comp2.AmbientTemperature > 0f) { s += HoursToIdeal(comp2, 0); } else if (comp2.AmbientTemperature <= 0f) { s += WillNeverReach(); } } else if (comp2.curTemp < comp2.PropsTemp.tempLevels.goodTemp) { if (ambient > comp2.PropsTemp.tempLevels.goodTemp) { s += HoursInIdeal(comp2, comp2.PropsTemp.tempLevels.goodTemp); } else { s += InIdealRange(); } } else if (ambient < comp2.PropsTemp.tempLevels.goodTemp) { s += HoursToIdeal(comp2, comp2.PropsTemp.tempLevels.goodTemp); } else { s += WillNeverReach(); } } } } } return(s); }
public static string HoursToIdeal(CompDTemperatureIngestible comp, double idealTemp) { return("\nWill reach ideal temperature for consumption in around " + ThermodynamicsBase.HoursToTargetTemp(comp, idealTemp).ToString("f1") + " hours."); }