Exemplo n.º 1
0
        public double CalculateStoppingDistance(Vector3D velocity, Vector3D travelDir, Base6Directions.Direction baseBrakeDir)
        {
            if (!Data.SlowDownOnWaypointApproach)
            {
                return(-1);
            }

            var force   = GetEffectiveThrustInDirection(baseBrakeDir);
            var mass    = _remoteControl.CalculateShipMass().TotalMass;
            var accel   = MathTools.CalculateAcceleration(force, mass);
            var gravity = _remoteControl.GetNaturalGravity();

            if (gravity != Vector3D.Zero)
            {
                var gravLen = gravity.Length();
                accel += Vector3D.Dot(Vector3D.Normalize(gravity), travelDir) * gravLen;
            }

            if (accel <= 0)
            {
                return(0);
            }

            return(MathTools.StoppingDistance(accel, velocity.Length(), Data.IdealMinSpeed) + Data.ExtraSlowDownDistance);
        }