public static radiation_data analyze_radiation(List<Part> parts, environment_data env, crew_data crew) { // store data radiation_data radiation = new radiation_data(); // scan the parts foreach(Part p in parts) { // accumulate shielding amount and capacity radiation.shielding_amount += Lib.GetResourceAmount(p, "Shielding"); radiation.shielding_capacity += Lib.GetResourceCapacity(p, "Shielding"); } // calculate radiation data double shielding = Radiation.Shielding(radiation.shielding_amount, radiation.shielding_capacity); double belt_strength = Settings.BeltRadiation * Radiation.Dynamo(env.body) * 0.5; //< account for the 'ramp' if (crew.capacity > 0) { radiation.life_expectancy = new double[] { Settings.RadiationFatalThreshold / (Settings.CosmicRadiation * (1.0 - shielding)), Settings.RadiationFatalThreshold / (Settings.StormRadiation * (1.0 - shielding)), Radiation.HasBelt(env.body) ? Settings.RadiationFatalThreshold / (belt_strength * (1.0 - shielding)) : double.NaN }; } else { radiation.life_expectancy = new double[]{double.NaN, double.NaN, double.NaN}; } // return data return radiation; }
void render_radiation(radiation_data radiation, environment_data env, crew_data crew) { string magnetosphere_str = Radiation.HasMagnetosphere(env.body) ? Lib.HumanReadableRange(Radiation.MagnAltitude(env.body)) : "none"; string belt_strength_str = Radiation.HasBelt(env.body) ? " (" + (Radiation.Dynamo(env.body) * Settings.BeltRadiation * (60.0 * 60.0)).ToString("F0") + " rad/h)" : ""; string belt_str = Radiation.HasBelt(env.body) ? Lib.HumanReadableRange(Radiation.BeltAltitude(env.body)) : "none"; string shield_str = Radiation.ShieldingToString(radiation.shielding_amount, radiation.shielding_capacity); string shield_tooltip = radiation.shielding_capacity > 0 ? "average over the vessel" : ""; string life_str = Lib.HumanReadableDuration(radiation.life_expectancy[0]) + "</b> / <b>" + Lib.HumanReadableDuration(radiation.life_expectancy[1]); string life_tooltip = "cosmic / storm"; if (Radiation.HasBelt(env.body)) { life_str += "</b> / <b>" + Lib.HumanReadableDuration(radiation.life_expectancy[2]); life_tooltip += " / belt"; } render_title("RADIATION"); render_content("magnetosphere", magnetosphere_str, "protect from cosmic radiation"); render_content("radiation belt", belt_str, "abnormal radiation zone" + belt_strength_str); render_content("shielding", shield_str, shield_tooltip); render_content("life expectancy", crew.capacity > 0 ? life_str : "perpetual", crew.capacity > 0 ? life_tooltip : ""); render_space(); }