private void adjustFlight(float height) {
    //
    //  Firstly, determine what your current position is relative to the aim
    //  point-
    final Vec3D disp = aimPos.sub(position, null) ;
    final Vec2D heading = new Vec2D().setTo(disp).scale(-1) ;
    //
    //  Calculate rate of lateral speed and descent-
    final float UPS = 1f / PlayLoop.UPDATES_PER_SECOND ;
    final float speed = TOP_SPEED * height * UPS ;
    float ascent = TOP_SPEED * UPS / 4 ;
    ascent = Math.min(ascent, Math.abs(position.z - aimPos.z)) ;
    if (stage == STAGE_DESCENT) ascent *= -1 ;
    //
    //  Then head toward the aim point-
    if (disp.length() > speed) disp.scale(speed / disp.length()) ;
    disp.z = 0 ;
    nextPosition.setTo(position).add(disp) ;
    nextPosition.z = position.z + ascent ;
    //
    //  And adjust rotation-
    float angle = (heading.toAngle() * height) + (90 * (1 - height)) ;
    final float
      angleDif = Vec2D.degreeDif(angle, rotation),
      absDif   = Math.abs(angleDif), maxRotate = 90 * UPS ;
    if (height < 0.5f && absDif > maxRotate) {
      angle = rotation + (maxRotate * (angleDif > 0 ? 1 : -1)) ;
      angle = (angle + 360) % 360 ;
    }
    nextRotation = angle ;
  }