private void PersistantThrust(float fixedDeltaTime, double universalTime, Vector3d thrustDirection, double vesselMass) { var propellantAverageDensity = Current_propellant.ResourceDefinition.density; double fuelRatio = 0; double demandMass; // determine fuel availability if (Current_propellant.PropellantName != "QVP" && !CheatOptions.InfinitePropellant && propellantAverageDensity > 0) { thrustDirection.CalculateDeltaVV(vesselMass, fixedDeltaTime, throtle_max_thrust, engineIsp, out demandMass); var requestedAmount = demandMass / propellantAverageDensity; if (IsValidPositiveNumber(requestedAmount)) { fuelRatio = part.RequestResource(Current_propellant.Propellant.name, requestedAmount) / requestedAmount; } } else { fuelRatio = 1; } var effectiveThrust = throtle_max_thrust * fuelRatio; var deltaVv = thrustDirection.CalculateDeltaVV(vesselMass, fixedDeltaTime, effectiveThrust, engineIsp, out demandMass); if (fuelRatio > 0.01) { vessel.orbit.Perturb(deltaVv, universalTime); } }
private void PersistantThrust(float modifiedFixedDeltaTime, double modifiedUniversalTime, Vector3d thrustVector, float vesselMass) { var timeDilationMaximumThrust = timeDilation * timeDilation * MaximumThrust * (maximizeThrust ? 1 : storedThrotle); var timeDialationEngineIsp = timeDilation * engineIsp; double demandMass; thrustVector.CalculateDeltaVV(vesselMass, modifiedFixedDeltaTime, timeDilationMaximumThrust * fusionRatio, timeDialationEngineIsp, out demandMass); var fusionFuelRequestAmount = demandMass / fusionFuelResourceDefinition.density; double recievedRatio; if (CheatOptions.InfinitePropellant) { recievedRatio = 1; } else { var recievedFusionFuel = part.RequestResource(fusionFuelResourceDefinition.id, fusionFuelRequestAmount, ResourceFlowMode.STACK_PRIORITY_SEARCH); recievedRatio = fusionFuelRequestAmount > 0 ? recievedFusionFuel / fusionFuelRequestAmount : 0; } effectiveMaxThrustInKiloNewton = timeDilationMaximumThrust * recievedRatio; if (!(recievedRatio > 0.01)) { return; } var deltaVv = thrustVector.CalculateDeltaVV(vesselMass, modifiedFixedDeltaTime, effectiveMaxThrustInKiloNewton, timeDialationEngineIsp, out demandMass); vessel.orbit.Perturb(deltaVv, modifiedUniversalTime); }
private void PersistantThrust(float modifiedFixedDeltaTime, double modifiedUniversalTime, Vector3d thrustVector, float vesselMass) { var timeDilationMaximumThrust = timeDilation * timeDilation * MaximumThrust; var timeDialationEngineIsp = timeDilation * engineIsp; double demandMass; thrustVector.CalculateDeltaVV(vesselMass, modifiedFixedDeltaTime, timeDilationMaximumThrust * fusionRatio, timeDialationEngineIsp, out demandMass); var fusionFuelRequestAmount = demandMass / fusionFuelResourceDefinition.density; fusionFuelUsageDay = fusionFuelRequestAmount / modifiedFixedDeltaTime * PluginHelper.SecondsInDay; if (CheatOptions.InfinitePropellant) { recievedRatio = 1; } else { var recievedFusionFuel = part.RequestResource(fusionFuelResourceDefinition.id, fusionFuelRequestAmount, ResourceFlowMode.STACK_PRIORITY_SEARCH); recievedRatio = fusionFuelRequestAmount > 0 ? recievedFusionFuel / fusionFuelRequestAmount : 0; } effectiveThrust = timeDilationMaximumThrust * recievedRatio; var deltaVV = thrustVector.CalculateDeltaVV(vesselMass, modifiedFixedDeltaTime, effectiveThrust, timeDialationEngineIsp, out demandMass); if (recievedRatio > 0.01) { vessel.orbit.Perturb(deltaVV, modifiedUniversalTime); } }