GetRelativeVelocity() public method

Gets the relative velocity of the spacecraft. If the space craft is within the parent's atmosphere than the rotation of the planet is taken in account. Otherwise its a simple difference of velocities.
public GetRelativeVelocity ( ) : DVector2
return VectorMath.DVector2
Ejemplo n.º 1
0
        public override void Update(double elapsedTime, SpaceCraftBase spaceCraft)
        {
            // Only run the landing algorithm while the spacecraft hasn't touched down
            if (!_landed)
            {
                double speed = spaceCraft.GetRelativeVelocity().Length();

                if (spaceCraft.OnGround || speed < 2 || spaceCraft.PropellantMass <= 0)
                {
                    _landed = true;

                    foreach (IEngine engine in spaceCraft.Engines)
                    {
                        engine.Shutdown();
                    }
                }

                double t = elapsedTime - _lastUpdate;

                double altitude = spaceCraft.GetRelativeAltitude();

                double updateRate = Math.Max(10 - altitude / 300, 1);

                // Update required this iteration
                if (t > 1.0 / updateRate)
                {
                    PredictTargetThrottle(spaceCraft);

                    _lastUpdate = elapsedTime;
                }
            }
        }
Ejemplo n.º 2
0
        // Interpolate between current and target orientation over the duration
        public override void Update(double elapsedTime, SpaceCraftBase spaceCraft)
        {
            DVector2 prograde = spaceCraft.GetRelativeVelocity();
            prograde.Normalize();

            double retrogradeAngle = prograde.Angle();

            double adjustRatio = (elapsedTime - StartTime) / _adjustmentTime;

            if (adjustRatio > 1)
            {
                spaceCraft.SetPitch(retrogradeAngle);
            }
            else
            {
                double interpolatedAdjust = _curentOrientation * (1 - adjustRatio) + retrogradeAngle * adjustRatio;

                spaceCraft.SetPitch(interpolatedAdjust);
            }
        }