public static int UpdateDryMass(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply) { part.prefabMass = part.mass = u_constants.CalculateImprovementValue(original_stats.dryMass, upgrades_to_apply.dryMass); // Dry Mass also improves fairing mass: var fairing_module = PartStats.GetModuleProceduralFairing(part); if (fairing_module) { fairing_module.UnitAreaMass = u_constants.CalculateImprovementValue(original_stats.fairingAreaMass, upgrades_to_apply.dryMass); } return(0); }
// Updates the global dictionary of available parts with the current set of upgrades (should be // executed for example when a new game starts or an existing game is loaded). public static int UpdateGlobalParts() { var upgrades_applied = 0; try { if (upgrades == null) { throw new Exception("upgrades-dictionary missing"); } foreach (var part in PartLoader.LoadedPartsList) { try { PartUpgrades upgrade; if (!upgrades.TryGetValue(part.name, out upgrade)) { upgrade = new PartUpgrades(); // If there are no upgrades, reset the part. } // Update the part to its latest model: UpdatePart(part.partPrefab, true); // Rebuild the info-screen: var converter_module_number = 0; // There might be multiple modules of this type var engine_module_number = 0; // There might be multiple modules of this type foreach (var info in part.moduleInfos) { if (info.moduleName.ToLower() == "engine") { var engines = PartStats.GetModuleEnginesList(part.partPrefab); if (engines != null && engines.Count > 0) { var engine = engines[engine_module_number]; info.info = engine.GetInfo(); info.primaryInfo = engine.GetPrimaryField(); engine_module_number++; } } else if (info.moduleName.ToLower() == "rcs") { var rcs = PartStats.GetModuleRCS(part.partPrefab); if (rcs) { info.info = rcs.GetInfo(); } } else if (info.moduleName.ToLower() == "reaction wheel") { var reaction_wheel = PartStats.GetModuleReactionWheel(part.partPrefab); if (reaction_wheel) { info.info = reaction_wheel.GetInfo(); } } else if (info.moduleName.ToLower() == "deployable solar panel") { var solar_panel = PartStats.GetModuleDeployableSolarPanel(part.partPrefab); if (solar_panel) { info.info = GetSolarPanelInfo(solar_panel); } } else if (info.moduleName.ToLower() == "landing leg") { var landing_leg = PartStats.GetModuleWheelBase(part.partPrefab); if (landing_leg) { info.info = landing_leg.GetInfo(); } } else if (info.moduleName.ToLower() == "fission generator") { var fission_generator = PartStats.GetFissionGenerator(part.partPrefab); if (fission_generator) { info.info = fission_generator.GetInfo(); } } else if (info.moduleName.ToLower() == "generator") { var generator = PartStats.GetModuleGenerator(part.partPrefab); if (generator) { info.info = generator.GetInfo(); } } else if (info.moduleName.ToLower() == "data transmitter") { var antenna = PartStats.GetModuleDataTransmitter(part.partPrefab); if (antenna) { info.info = antenna.GetInfo(); } } else if (info.moduleName.ToLower() == "science lab") { var lab = PartStats.GetModuleScienceLab(part.partPrefab); if (lab) { info.info = lab.GetInfo(); } } else if (info.moduleName.ToLower() == "active radiator") { var lab = PartStats.GetModuleActiveRadiator(part.partPrefab); if (lab) { info.info = lab.GetInfo(); } } else if (info.moduleName.ToLower() == "resource converter") { var converter_list = PartStats.GetModuleResourceConverterList(part.partPrefab); if (converter_list == null || converter_list.Count <= 0) { continue; } var converter = converter_list[converter_module_number]; info.info = converter.GetInfo(); converter_module_number++; } else if (info.moduleName.ToLower() == "parachute") { var parachute = PartStats.GetModuleParachute(part.partPrefab); if (parachute) { info.info = parachute.GetInfo(); } } else if (info.moduleName.ToLower() == "resource harvester") { var harvester = PartStats.GetModuleResourceHarvester(part.partPrefab); if (harvester) { info.info = harvester.GetInfo(); } } else if (info.moduleName.ToLower() == "custom-built fairing") { var fairing = PartStats.GetModuleProceduralFairing(part.partPrefab); if (fairing) { info.info = fairing.GetInfo(); } } } var fuel_resources = PartStats.GetFuelResources(part.partPrefab); var electric_charge = PartStats.GetElectricCharge(part.partPrefab); // The Resource-Names are not always formatted the same way, eg "Electric Charge" vs "ElectricCharge", so we do some reformatting. foreach (var info in part.resourceInfos) { if (electric_charge != null && info.resourceName.Replace(" ", "").ToLower() == electric_charge.resourceName.Replace(" ", "").ToLower()) { info.info = electric_charge.GetInfo(); info.primaryInfo = "<b>" + info.resourceName + ":</b> " + electric_charge.maxAmount; } else if (fuel_resources != null) { foreach (var fuel_resource in fuel_resources) { if (info.resourceName.Replace(" ", "").ToLower() == fuel_resource.resourceName.Replace(" ", "").ToLower()) { info.info = fuel_resource.GetInfo(); info.primaryInfo = "<b>" + info.resourceName + ":</b> " + fuel_resource.maxAmount; break; } } } } upgrades_applied++; } catch (Exception e) { Debug.LogError("[KRnD] updateGlobalParts(" + part.title + "): " + e); } } } catch (Exception e) { Debug.LogError("[KRnD] updateGlobalParts(): " + e); } return(upgrades_applied); }
// Returns the info-text of the given part with the given upgrades to be displayed in the GUI-comparison. private string BuildPartInfoString(Part part, PartUpgrades upgrades_to_apply = null) { var info = ""; PartUpgrades original_upgrades = null; try { var rnd_module = PartStats.GetKRnDModule(part); if (rnd_module == null || (original_upgrades = rnd_module.GetCurrentUpgrades()) == null) { return(info); } // Upgrade the part to get the correct info, we revert it back to its previous values in the finally block below: KRnD.UpdatePart(part, upgrades_to_apply); var engine_modules = PartStats.GetModuleEnginesList(part); var rcs_module = PartStats.GetModuleRCS(part); var reaction_wheel_module = PartStats.GetModuleReactionWheel(part); var solar_panel_module = PartStats.GetModuleDeployableSolarPanel(part); var landing_leg_module = PartStats.GetModuleWheelBase(part); var electric_charge_resource = PartStats.GetElectricCharge(part); var generator_module = PartStats.GetModuleGenerator(part); var fission_generator = PartStats.GetFissionGenerator(part); var converter_modules = PartStats.GetModuleResourceConverterList(part); var parachute_module = PartStats.GetModuleParachute(part); var fairing_module = PartStats.GetModuleProceduralFairing(part); var fuel_resources = PartStats.GetFuelResources(part); var antenna_module = PartStats.GetModuleDataTransmitter(part); var science_module = PartStats.GetModuleScienceLab(part); var harvester_module = PartStats.GetModuleResourceHarvester(part); var radiator_module = PartStats.GetModuleActiveRadiator(part); var el_converter = PartStats.GetModuleElConverter(part); // Basic stats: info = "<color=#FFFFFF><b>Dry Mass:</b> " + part.mass.ToString("0.#### t") + "\n"; info += "<b>Max Temp.:</b> " + part.maxTemp.ToString("0.#") + "/" + part.skinMaxTemp.ToString("0.#") + " °K\n"; if (landing_leg_module != null) { info += "<b>Crash Tolerance:</b> " + part.crashTolerance.ToString("0.#### m/s") + "\n"; } if (electric_charge_resource != null) { info += "<b>Electric Charge:</b> " + electric_charge_resource.maxAmount + "\n"; } // Fuels: if (fuel_resources != null) { foreach (var fuel_resource in fuel_resources) { // Reformat resource-names like "ElectricCharge" to "Electric Charge": var fuel_name = fuel_resource.resourceName; fuel_name = Regex.Replace(fuel_name, @"([a-z])([A-Z])", "$1 $2"); info += "<b>" + fuel_name + ":</b> " + fuel_resource.maxAmount + "\n"; } } // Module stats: info += "\n"; if (engine_modules != null) { foreach (var engine_module in engine_modules) { info += "<color=#99FF00><b>Engine"; if (engine_modules.Count > 1) { info += " (" + engine_module.engineID + ")"; } info += ":</b></color>\n" + engine_module.GetInfo(); if (engine_modules.Count > 1) { info += "\n"; } } } if (rcs_module) { info += "<color=#99FF00><b>RCS:</b></color>\n" + rcs_module.GetInfo(); } if (reaction_wheel_module) { info += "<color=#99FF00><b>Reaction Wheel:</b></color>\n" + reaction_wheel_module.GetInfo(); } if (solar_panel_module) { info += "<color=#99FF00><b>Solar Panel:</b></color>\n" + KRnD.GetSolarPanelInfo(solar_panel_module); } if (generator_module) { info += "<color=#99FF00><b>Generator:</b></color>\n" + generator_module.GetInfo(); } if (fission_generator) { info += "<color=#99FF00><b>Fission-Generator:</b></color>\n" + fission_generator.GetInfo(); } if (converter_modules != null) { foreach (var converter_module in converter_modules) { info += "<color=#99FF00><b>Converter " + converter_module.ConverterName + ":</b></color>\n" + converter_module.GetInfo() + "\n"; } } if (parachute_module) { info += "<color=#99FF00><b>Parachute:</b></color>\n" + parachute_module.GetInfo(); } if (fairing_module) { info += "<color=#99FF00><b>Fairing:</b></color>\n" + fairing_module.GetInfo(); } if (antenna_module) { info += "<color=#99FF00><b>Antenna:</b></color>\n" + antenna_module.GetInfo(); } if (science_module) { info += "<color=#99FF00><b>Science Lab:</b></color>\n" + science_module.GetInfo(); } if (harvester_module) { info += "<color=#99FF00><b>Harvester:</b></color>\n" + harvester_module.GetInfo(); } if (radiator_module) { info += "<color=#99FF00><b>Radiator:</b></color>\n" + radiator_module.GetInfo(); } if (el_converter) { info += "<color=#99FF00><b>EL Converter:</b></color>\n" + el_converter.GetInfo(); } info += "</color>"; } catch (Exception e) { Debug.LogError("[KRnDGUI] getPartInfo(): " + e); } finally { try { if (original_upgrades != null) { KRnD.UpdatePart(part, original_upgrades); } } catch (Exception e) { Debug.LogError("[KRnDGUI] getPartInfo() restore of part failed: " + e); } } return(info); }