override internal void Update(double elapsedTime, GameTime gameTime)
        {
            BodyReference body = Body();

            UpdateOrientation(body);

            Brakement((float)elapsedTime, body);
            Movement((float)elapsedTime, body);
            Aligment((float)elapsedTime);
            Rotation((float)elapsedTime);

            emitter.Position = Position();
            emitter.Forward  = forward;
            emitter.Up       = upDirection;
            emitter.Velocity = body.Velocity.Linear.ToVector3();

            if (Input.Accelerate())
            {
                lastTurbo = gameTime.TotalGameTime.TotalMilliseconds;
            }
            if (gameTime.TotalGameTime.TotalMilliseconds > lastTurbo + turboRegenerationTime)
            {
                turbo = Math.Min(turbo + turboRegeneration * (float)elapsedTime, maxTurbo);
            }
        }
        private void Brakement(float elapsedTime, BodyReference body)
        {
            Vector3 velocity      = Velocity();
            float   brakmentForce = -acceleration / 10;

            Vector3 forwardBreakment   = (!Input.Accelerate() || turbo == 0) ? forward : Vector3.Zero;
            float   horizontalSpeed    = Vector3.Dot(velocity, rightDirection) / (rightDirection.Length() * rightDirection.Length());
            Vector3 horizontalBrakment = horizontalSpeed != 0 ? Vector3.Normalize(rightDirection * horizontalSpeed) : Vector3.Zero;
            float   verticalSpeed      = Vector3.Dot(velocity, upDirection) / (upDirection.Length() * upDirection.Length());
            Vector3 verticalBrakment   = verticalSpeed != 0 ? Vector3.Normalize(upDirection * verticalSpeed) : Vector3.Zero;

            AddLinearVelocity(body, (forwardBreakment + horizontalBrakment + verticalBrakment) * brakmentForce * elapsedTime);
        }
 private void Movement(float elapsedTime, BodyReference body)
 {
     if (Input.Accelerate())
     {
         float speed = acceleration * elapsedTime;
         speed = Math.Min(speed, turbo);
         AddLinearVelocity(body, forward * speed);
         turbo -= speed;
     }
     else
     {
         AddLinearVelocity(body, Vector3.Zero);
     }
 }