예제 #1
0
        public static int UpdateGeneratorEfficiency(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply)
        {
            var generator = PartStats.GetModuleGenerator(part);

            if (generator)
            {
                foreach (var output_resource in generator.resHandler.outputResources)
                {
                    if (!original_stats.generatorEfficiency.TryGetValue(output_resource.name, out var original_rate))
                    {
                        continue;
                    }
                    output_resource.rate = u_constants.CalculateImprovementValue(original_rate, upgrades_to_apply.generatorEfficiency);
                }
            }

            var fission_generator = PartStats.GetFissionGenerator(part);

            if (fission_generator)
            {
                var power_generation = u_constants.CalculateImprovementValue(original_stats.fissionPowerGeneration, upgrades_to_apply.generatorEfficiency);
                PartStats.SetGenericModuleValue(fission_generator, "PowerGeneration", power_generation);
            }

            return(0);
        }
예제 #2
0
        public static int UpdateElConverter(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply)
        {
            var converter_list = PartStats.GetModuleElConverterList(part);

            if (converter_list == null)
            {
                return(0);
            }

            foreach (var converter in converter_list)
            {
                converter.Rate = u_constants.CalculateImprovementValue(original_stats.ELConverter, upgrades_to_apply.elConverter);
            }


#if false
            var el_converter = PartStats.GetModuleElConverter(part);
            if (el_converter)
            {
                el_converter.Rate = u_constants.CalculateImprovementValue(original_stats.ELConverter, upgrades_to_apply.elConverter);
            }
#endif

            return(0);
        }
예제 #3
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);
        }
예제 #4
0
        public static int UpdateConverterEfficiency(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply)
        {
            // Converter Efficiency:
            var converter_list = PartStats.GetModuleResourceConverterList(part);

            if (converter_list == null)
            {
                return(0);
            }

            foreach (var converter in converter_list)
            {
                if (!original_stats.converterEfficiency.TryGetValue(converter.ConverterName, out var original_output_resources))
                {
                    continue;
                }

                // Since KSP 1.2 this can't be done in a foreach anymore, we have to read and write back the entire ResourceRatio-Object:
                for (var i = 0; i < converter.outputList.Count; i++)
                {
                    var resource_ratio = converter.outputList[i];
                    if (!original_output_resources.TryGetValue(resource_ratio.ResourceName, out var original_ratio))
                    {
                        continue;
                    }

                    resource_ratio.Ratio    = u_constants.CalculateImprovementValue(original_ratio, upgrades_to_apply.converterEfficiency);
                    converter.outputList[i] = resource_ratio;
                }
            }

            return(0);
        }
예제 #5
0
        public static int UpdateDataStorage(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply)
        {
            var science_lab = PartStats.GetModuleScienceLab(part);

            if (science_lab)
            {
                science_lab.dataStorage = u_constants.CalculateImprovementValue(original_stats.dataStorage, upgrades_to_apply.dataStorage);
            }

            var science_converter = PartStats.GetModuleScienceConverter(part);

            if (science_converter)
            {
                science_converter.scienceCap = u_constants.CalculateImprovementValue(original_stats.scienceCap, upgrades_to_apply.dataStorage);
            }

            return(0);
        }
예제 #6
0
        public static int UpdateActiveRadiator(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply)
        {
            var radiator = PartStats.GetModuleActiveRadiator(part);

            if (radiator)
            {
                radiator.maxEnergyTransfer = u_constants.CalculateImprovementValue(original_stats.maxEnergyTransfer, upgrades_to_apply.maxEnergyTransfer);
            }

            return(0);
        }
예제 #7
0
        public static int UpdatePacketSize(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply)
        {
            var antenna = PartStats.GetModuleDataTransmitter(part);

            if (antenna)
            {
                antenna.packetSize = u_constants.CalculateImprovementValue(original_stats.packetSize, upgrades_to_apply.packetSize);
            }

            return(0);
        }
예제 #8
0
        public static int UpdateCrashTolerance(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply)
        {
            var landing_leg = PartStats.GetModuleWheelBase(part);

            if (landing_leg)
            {
                part.crashTolerance = u_constants.CalculateImprovementValue(original_stats.crashTolerance, upgrades_to_apply.crashTolerance);
            }

            return(0);
        }
예제 #9
0
        public static int UpdateChargeRate(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply)
        {
            var solar_panel = PartStats.GetModuleDeployableSolarPanel(part);

            if (solar_panel)
            {
                solar_panel.efficiencyMult = u_constants.CalculateImprovementValue(original_stats.efficiencyMult, upgrades_to_apply.efficiencyMult);
            }

            return(0);
        }
예제 #10
0
        public static int UpdateResourceHarvester(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply)
        {
            // Resource Harvester
            var harvester = PartStats.GetModuleResourceHarvester(part);

            if (harvester)
            {
                harvester.Efficiency = u_constants.CalculateImprovementValue(original_stats.resourceHarvester, upgrades_to_apply.resourceHarvester);
            }

            // TODO: Update surface harvester module too?
            return(0);
        }
예제 #11
0
        public static int UpdateBatteryCharge(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply)
        {
            var electric_charge = PartStats.GetElectricCharge(part);

            if (electric_charge == null)
            {
                return(0);
            }

            var max_charge      = Math.Round(u_constants.CalculateImprovementValue(original_stats.batteryCharge, upgrades_to_apply.batteryCharge));
            var percentage_full = electric_charge.amount / electric_charge.maxAmount;

            electric_charge.maxAmount = max_charge;
            electric_charge.amount    = max_charge * percentage_full;
            return(0);
        }
예제 #12
0
        public static int UpdateTorque(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply)
        {
            var reaction_wheel = PartStats.GetModuleReactionWheel(part);

            if (!reaction_wheel)
            {
                return(0);
            }

            var torque = u_constants.CalculateImprovementValue(original_stats.torqueStrength, upgrades_to_apply.torqueStrength);

            reaction_wheel.PitchTorque = torque;
            reaction_wheel.YawTorque   = torque;
            reaction_wheel.RollTorque  = torque;
            return(0);
        }
예제 #13
0
 public static int UpdateMaxTemperature(UpgradeConstants u_constants, Part part, PartStats original_stats, PartUpgrades upgrades_to_apply)
 {
     part.skinMaxTemp = u_constants.CalculateImprovementValue(original_stats.skinMaxTemp, upgrades_to_apply.maxTemperature);
     part.maxTemp     = u_constants.CalculateImprovementValue(original_stats.intMaxTemp, upgrades_to_apply.maxTemperature);
     return(0);
 }