internal static double CalculateOtherPower(Vessel vessel) { double otherPower = 0; List <ModuleGenerator> powerModules = vessel.FindPartModulesImplementing <ModuleGenerator> (); for (int i = 0; i < powerModules.Count; i++) { // Find standard RTGs ModuleGenerator powerModule = powerModules [i]; if (powerModule.generatorIsActive || powerModule.isAlwaysActive) { for (int j = 0; j < powerModule.resHandler.outputResources.Count; ++j) { var resource = powerModule.resHandler.outputResources [j]; if (resource.name == "ElectricCharge") { otherPower += resource.rate * powerModule.efficiency; } } } } for (int i = 0; i < vessel.parts.Count; i++) { var part = vessel.parts [i]; // Search for other generators PartModuleList modules = part.Modules; for (int j = 0; j < modules.Count; j++) { var module = modules [j]; // Near future fission reactors if (module.moduleName == "FissionGenerator") { otherPower += double.Parse(module.Fields.GetValue("CurrentGeneration").ToString()); } } // USI reactors ModuleResourceConverter converterModule = part.FindModuleImplementing <ModuleResourceConverter> (); if (converterModule != null) { if (converterModule.ModuleIsActive() && converterModule.ConverterName == "Reactor") { for (int j = 0; j < converterModule.outputList.Count; ++j) { var resource = converterModule.outputList [j]; if (resource.ResourceName == "ElectricCharge") { otherPower += resource.Ratio * converterModule.GetEfficiencyMultiplier(); } } } } } return(otherPower); } // So many ifs.....
/// <summary> /// Calculate available power from generators and reactors /// </summary> /// <returns></returns> private double GetAvailablePower_Other() { double otherPower = 0; // Go through all parts and get power from generators and reactors for (int i = 0; i < vessel.parts.Count; ++i) { var part = vessel.parts[i]; // Standard RTG ModuleGenerator powerModule = part.FindModuleImplementing <ModuleGenerator>(); if (powerModule != null) { if (powerModule.generatorIsActive || powerModule.isAlwaysActive) { // Go through resources and get EC power for (int j = 0; j < powerModule.resHandler.outputResources.Count; ++j) { var resource = powerModule.resHandler.outputResources[j]; if (resource.name == "ElectricCharge") { otherPower += resource.rate * powerModule.efficiency; } } } } // Other generators PartModuleList modules = part.Modules; for (int j = 0; j < modules.Count; ++j) { var module = modules[j]; // Near future fission reactors if (module.moduleName == "FissionGenerator") { otherPower += double.Parse(module.Fields.GetValue("CurrentGeneration").ToString()); } // KSP Interstellar generators if ((module.moduleName == "ThermalElectricEffectGenerator") || (module.moduleName == "IntegratedThermalElectricPowerGenerator") || (module.moduleName == "ThermalElectricPowerGenerator") || (module.moduleName == "IntegratedChargedParticlesPowerGenerator") || (module.moduleName == "ChargedParticlesPowerGenerator") || (module.moduleName == "FNGenerator")) { if (bool.Parse(module.Fields.GetValue("IsEnabled").ToString())) { //otherPower += double.Parse(module.Fields.GetValue("maxElectricdtps").ToString()); // Doesn't work as expected string maxPowerStr = module.Fields.GetValue("MaxPowerStr").ToString(); double maxPower = 0; if (maxPowerStr.Contains("GW")) { maxPower = double.Parse(maxPowerStr.Replace(" GW", "")) * 1000000; } else if (maxPowerStr.Contains("MW")) { maxPower = double.Parse(maxPowerStr.Replace(" MW", "")) * 1000; } else { maxPower = double.Parse(maxPowerStr.Replace(" KW", "")); } otherPower += maxPower; } } } // WBI reactors, USI reactors and MKS Power Pack ModuleResourceConverter converterModule = part.FindModuleImplementing <ModuleResourceConverter>(); if (converterModule != null) { if (converterModule.ModuleIsActive() && ((converterModule.ConverterName == "Nuclear Reactor") || (converterModule.ConverterName == "Reactor") || (converterModule.ConverterName == "Generator"))) { for (int j = 0; j < converterModule.outputList.Count; ++j) { var resource = converterModule.outputList[j]; if (resource.ResourceName == "ElectricCharge") { otherPower += resource.Ratio * converterModule.GetEfficiencyMultiplier(); } } } } } return(otherPower); }
private double CalculateOtherPower() { double otherPower = 0; for (int i = 0; i < this.vessel.parts.Count; ++i) { var part = this.vessel.parts[i]; // Find standard RTGs ModuleGenerator powerModule = part.FindModuleImplementing <ModuleGenerator>(); if (powerModule != null) { if (powerModule.generatorIsActive || powerModule.isAlwaysActive) { for (int j = 0; j < powerModule.resHandler.outputResources.Count; ++j) { var resource = powerModule.resHandler.outputResources[j]; if (resource.name == "ElectricCharge") { otherPower += resource.rate * powerModule.efficiency; } } } } // Search for other generators PartModuleList modules = part.Modules; for (int j = 0; j < modules.Count; ++j) { var module = modules[j]; // Near future fission reactors if (module.moduleName == "FissionGenerator") { otherPower += double.Parse(module.Fields.GetValue("CurrentGeneration").ToString()); } // KSP Interstellar generators if (module.moduleName == "FNGenerator") { string maxPowerStr = module.Fields.GetValue("MaxPowerStr").ToString(); double maxPower = 0; if (maxPowerStr.Contains("GW")) { maxPower = double.Parse(maxPowerStr.Replace(" GW", "")) * 1000000; } else if (maxPowerStr.Contains("MW")) { maxPower = double.Parse(maxPowerStr.Replace(" MW", "")) * 1000; } else { maxPower = double.Parse(maxPowerStr.Replace(" KW", "")); } otherPower += maxPower; } } // WBI reactors, USI reactors and MKS Power Pack ModuleResourceConverter converterModule = part.FindModuleImplementing <ModuleResourceConverter>(); if (converterModule != null) { if (converterModule.ModuleIsActive() && ((converterModule.ConverterName == "Nuclear Reactor") || (converterModule.ConverterName == "Reactor") || (converterModule.ConverterName == "Generator"))) { for (int j = 0; j < converterModule.outputList.Count; ++j) { var resource = converterModule.outputList[j]; if (resource.ResourceName == "ElectricCharge") { otherPower += resource.Ratio * converterModule.GetEfficiencyMultiplier(); } } } } } return(otherPower); } // So many ifs.....