public override void UpdateSolver(EngineThermodynamics ambientTherm, double altitude, Vector3d vel, double mach, bool sIgnited, bool oxygen, bool underwater)
{
throttledUp = false;
// handle ignition
if (HighLogic.LoadedSceneIsFlight)
{
if (vessel.ctrlState.mainThrottle > 0f || throttleLocked)
{
throttledUp = true;
}
else
{
ignited = false;
}
IgnitionUpdate();
// Ullage
bool pressureOK = ullageSet.PressureOK();
propellantStatus = "Nominal";
if (ullage && RFSettings.Instance.simulateUllage)
{
propellantStatus = ullageSet.GetUllageState(out ullageColor);
part.stackIcon.SetIconColor(ullageColor);
if (EngineIgnited && ignited && throttledUp && rfSolver.GetRunning())
{
double state = ullageSet.GetUllageStability();
double testValue = Math.Pow(state, RFSettings.Instance.stabilityPower);
if (UnityEngine.Random.value > testValue)
{
ScreenMessages.PostScreenMessage(ullageFail);
FlightLogger.fetch.LogEvent("[" + FormatTime(vessel.missionTime) + "] " + ullageFail.message);
reignitable = false;
ullageOK = false;
ignited = false;
Flameout("Vapor in feed line");
}
}
}
if (!pressureOK)
{
propellantStatus = "Feed pressure too low"; // override ullage status indicator
Flameout("Lack of pressure", false, ignited);
ignited = false;
reignitable = false;
}
needSetPropStatus = false;
rfSolver.SetPropellantStatus(pressureOK, (ullageOK || !RFSettings.Instance.simulateUllage));
// do thrust curve
if (ignited && useThrustCurve)
{
thrustCurveRatio = (float)((propellants[curveProp].totalResourceAvailable / propellants[curveProp].totalResourceCapacity));
if (thrustCurveUseTime)
{
thrustCurveDisplay = thrustCurve.Evaluate(curveTime);
if (EngineIgnited)
{
curveTime += TimeWarp.fixedDeltaTime;
}
}
else
{
thrustCurveDisplay = thrustCurve.Evaluate(thrustCurveRatio);
}
rfSolver.UpdateThrustRatio(thrustCurveDisplay);
}
}
// Set part temp
rfSolver.SetPartTemp(part.temperature);
// do heat
// heatProduction = (float)(scaleRecip * extHeatkW / PhysicsGlobals.InternalHeatProductionFactor * part.thermalMassReciprocal);
heatProduction = 0;
// run base method code
base.UpdateSolver(ambientTherm, altitude, vel, mach, ignited, oxygen, CheckTransformsUnderwater());
}