public void updateIspEngineParams() { // recaculate ISP based on power and core temp available FloatCurve newISP = new FloatCurve(); FloatCurve vCurve = new FloatCurve(); maxISP = (float)(Math.Sqrt((double)myAttachedReactor.getCoreTemp()) * isp_temp_rat * ispMultiplier); if (!currentpropellant_is_jet) { minISP = maxISP * 0.4f; newISP.Add(0, maxISP, 0, 0); newISP.Add(1, minISP, 0, 0); myAttachedEngine.useVelocityCurve = false; myAttachedEngine.useEngineResponseTime = false; } else { if (myAttachedReactor.shouldScaleDownJetISP()) { maxISP = maxISP * 2.0f / 3.0f; if (maxISP > 300) { maxISP = maxISP / 2.5f; } } newISP.Add(0, maxISP * 4.5f / 5.0f); newISP.Add(0.10f, maxISP); newISP.Add(0.3f, maxISP * 4.0f / 5.0f); newISP.Add(1, maxISP * 2.0f / 3.0f); vCurve.Add(0, 1.0f); vCurve.Add((float)(maxISP * g0 * 1.0 / 3.0), 1.0f); vCurve.Add((float)(maxISP * g0), 1.0f); vCurve.Add((float)(maxISP * g0 * 4.0 / 3.0), 0); myAttachedEngine.useVelocityCurve = true; myAttachedEngine.useEngineResponseTime = true; myAttachedEngine.ignitionThreshold = 0.01f; } myAttachedEngine.atmosphereCurve = newISP; myAttachedEngine.velocityCurve = vCurve; assThermalPower = myAttachedReactor.getThermalPower(); if (myAttachedReactor is FNFusionReactor) { assThermalPower = assThermalPower * 0.95f; } }
public void updateGeneratorPower() { hotBathTemp = myAttachedReactor.getCoreTemp(); float heat_exchanger_thrust_divisor = 1; if (radius > myAttachedReactor.getRadius()) { heat_exchanger_thrust_divisor = myAttachedReactor.getRadius() * myAttachedReactor.getRadius() / radius / radius; } else { heat_exchanger_thrust_divisor = radius * radius / myAttachedReactor.getRadius() / myAttachedReactor.getRadius(); } if (myAttachedReactor.getRadius() <= 0 || radius <= 0) { heat_exchanger_thrust_divisor = 1; } maxThermalPower = myAttachedReactor.getThermalPower() * heat_exchanger_thrust_divisor; maxChargedPower = myAttachedReactor.getChargedPower() * heat_exchanger_thrust_divisor; coldBathTemp = (float)FNRadiator.getAverageRadiatorTemperatureForVessel(vessel); }