public void FixedUpdate() { if (HighLogic.LoadedScene == GameScenes.FLIGHT) { if (reactor != null) { float maxFlowScalar = 0f; for (int i = 0; i < engineData.Count; i++) { // If the engine is off, it will have the maximum Isp available if (!engineData[i].engineFX.isActiveAndEnabled || (engineData[i].engineFX.isActiveAndEnabled && engineData[i].engineFX.throttleSetting <= 0f)) { engineData[i].engineFX.atmosphereCurve = engineData[i].ispCurve; maxFlowScalar = Mathf.Max(maxFlowScalar, 0.0f); } else { float CoreTemperatureRatio = TempIspScale.Evaluate((float)core.CoreTemperature); float reactorRatio = reactor.ActualPowerPercent / 100f * reactor.CoreIntegrity / 100f; if (!reactor.ModuleIsActive()) { reactorRatio = 0f; } float ispRatio = CoreTemperatureRatio * reactorRatio; engineData[i].engineFX.atmosphereCurve = new FloatCurve(); engineData[i].engineFX.atmosphereCurve.Add(0f, engineData[i].ispCurve.Evaluate(0f) * ispRatio); engineData[i].engineFX.atmosphereCurve.Add(1f, engineData[i].ispCurve.Evaluate(1f) * ispRatio); engineData[i].engineFX.atmosphereCurve.Add(4f, engineData[i].ispCurve.Evaluate(4f) * ispRatio); //Utils.Log(String.Format("{0} ui {1} max {2} reqested", engineData[i].engineFX.fuelFlowGui, engineData[i].engineFX.maxFuelFlow, engineData[i].engineFX.requestedMassFlow)); //Utils.Log(String.Format("{0} t_setting {1} normTr {2} normout", engineData[i].engineFX.throttleSetting, engineData[i].engineFX.normalizedThrustOutput, engineData[i].engineFX.normalizedOutput)); maxFlowScalar = Mathf.Max(maxFlowScalar, (engineData[i].engineFX.throttleSetting)); } } float heat = reactor.ActualPowerPercent / 100f * reactor.HeatGeneration / 50f * reactor.CoreIntegrity / 100f; //flowRadiator.ChangeRadiatorTransfer(Mathf.Max(base.CurrentHeatUsed, heat) * maxFlowScalar); float exhaustCooling = flowRadiator.ChangeRadiatorTransfer(maxFlowScalar); core.MaxCoolant = Mathf.Clamp(heat - exhaustCooling, 0.0f, heat); } } }
public void FixedUpdate() { if (HighLogic.LoadedScene == GameScenes.FLIGHT) { if (reactor != null) { float maxFlowScalar = 0f; foreach (EngineBaseData eData in engineData) { // If the engine is off, it will have the maximum Isp available if (!eData.engineFX.isActiveAndEnabled || (eData.engineFX.isActiveAndEnabled && eData.engineFX.throttleSetting <= 0f)) { eData.engineFX.atmosphereCurve = eData.ispCurve; maxFlowScalar = Mathf.Max(maxFlowScalar, 0.0f); } else { float CoreTemperatureRatio = TempIspScale.Evaluate((float)core.CoreTemperature); float reactorRatio = reactor.CurrentPowerPercent / 100f; if (!reactor.ModuleIsActive()) { reactorRatio = 0f; } float ispRatio = CoreTemperatureRatio * reactorRatio; eData.engineFX.atmosphereCurve = new FloatCurve(); eData.engineFX.atmosphereCurve.Add(0f, eData.ispCurve.Evaluate(0f) * ispRatio); eData.engineFX.atmosphereCurve.Add(1f, eData.ispCurve.Evaluate(1f) * ispRatio); eData.engineFX.atmosphereCurve.Add(4f, eData.ispCurve.Evaluate(4f) * ispRatio); //Utils.Log(String.Format("{0} ui {1} max {2} reqested",eData.engineFX.fuelFlowGui,eData.engineFX.maxFuelFlow,eData.engineFX.requestedMassFlow)); maxFlowScalar = Mathf.Max(maxFlowScalar, (eData.engineFX.requestedMassFlow / eData.engineFX.maxFuelFlow)); } } float heat = reactor.CurrentPowerPercent / 100f * reactor.HeatGeneration / 50f * reactor.CoreIntegrity / 100f; flowRadiator.ChangeRadiatorTransfer(Mathf.Max(base.CurrentHeatUsed, heat) * maxFlowScalar); } } }