Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }