Exemple #1
0
        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);
        }
Exemple #2
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);
        }
Exemple #3
0
        // 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);
        }