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); }