private void NewtonianMotionStep(double deltaTime)
        {
            // Newtonian motion type:
            for (int i = 0; i < Bodies.Count; i++)
            {
                if (!Bodies[i].isActiveAndEnabled || Bodies[i].IsFixedPosition || Bodies[i].UseKeplerMotion && Bodies[i].IsKeplerMotion)
                {
                    continue;
                }

                if (double.IsInfinity(Bodies[i].Velocity.x) || double.IsNaN(Bodies[i].Velocity.x))
                {
                    Debug.Log("SpaceGravity2D: Velocity is " + (double.IsNaN(Bodies[i].Velocity.x) ? "NaN !" : "INF !") + "\nbody: " + name);
                    Bodies[i].Velocity = new Vector3d();
                }
                switch (CalculationType)
                {
                case NBodyCalculationType.Euler:
                    CelestialBodyUtils.CalcAccelerationEulerForBody(Bodies[i], deltaTime, MinAttractionRange, MaxAttractionRange, _attractorsCache);
                    if (!Bodies[i].AdditionalVelocity.isZero)
                    {
                        Bodies[i].Velocity          += Bodies[i].AdditionalVelocity;
                        Bodies[i].AdditionalVelocity = Vector3d.zero;
                    }
                    if (double.IsInfinity(Bodies[i].Velocity.x) || double.IsNaN(Bodies[i].Velocity.x))
                    {
                        Bodies[i].Velocity = new Vector3d();
                    }
                    Bodies[i].Position = Bodies[i].Position + Bodies[i].Velocity * deltaTime;
                    break;

                case NBodyCalculationType.Verlet:
                    Bodies[i].Position += Bodies[i].Velocity * (deltaTime / 2d);
                    CelestialBodyUtils.CalcAccelerationEulerForBody(Bodies[i], deltaTime, MinAttractionRange, MaxAttractionRange, _attractorsCache);
                    if (!Bodies[i].AdditionalVelocity.isZero)
                    {
                        Bodies[i].Velocity          += Bodies[i].AdditionalVelocity;
                        Bodies[i].AdditionalVelocity = Vector3d.zero;
                    }
                    if (double.IsInfinity(Bodies[i].Velocity.x) || double.IsNaN(Bodies[i].Velocity.x))
                    {
                        Bodies[i].Velocity = new Vector3d();
                    }
                    Bodies[i].Position += Bodies[i].Velocity * (deltaTime / 2d);
                    break;

                case NBodyCalculationType.RungeKutta:
                    CelestialBodyUtils.CalcAccelerationRungeKuttaForBody(Bodies[i], deltaTime, MinAttractionRange, MaxAttractionRange, _attractorsCache);
                    if (!Bodies[i].AdditionalVelocity.isZero)
                    {
                        Bodies[i].Velocity          += Bodies[i].AdditionalVelocity;
                        Bodies[i].AdditionalVelocity = Vector3d.zero;
                    }
                    if (double.IsInfinity(Bodies[i].Velocity.x) || double.IsNaN(Bodies[i].Velocity.x))
                    {
                        Bodies[i].Velocity = new Vector3d();
                    }
                    Bodies[i].Position += Bodies[i].Velocity * deltaTime * 0.5d;
                    break;
                }
                Bodies[i].OrbitData.IsDirty = true;
                if (Bodies[i].UseKeplerMotion)
                {
                    // Transit to keplerian motion at next frame.
                    Bodies[i].IsKeplerMotion = true;
                }
            }
        }