update method

void update(
  1. double delta
)

Updates the controls. Usually called in the animation loop.

Implementation

void update(double delta){
  if(enabled == false) return;

  if(heightSpeed) {
    double y = MathUtils.clamp<double>(camera.position.y, heightMin, heightMax );
    final heightDelta = y - heightMin;
    autoSpeedFactor = delta * (heightDelta * heightCoef);
  }
  else {
    autoSpeedFactor = 0.0;
  }

  double actualMoveSpeed = delta * movementSpeed;

  if(moveForward || ( autoForward && !moveBackward ) ){
    velocity.add( getForwardVector().scale(actualMoveSpeed));
  }
  if(moveBackward){
    velocity.add( getForwardVector().scale(-actualMoveSpeed));
  }
  if(moveLeft){
    velocity.add( getSideVector().scale(-actualMoveSpeed));
  }
  if(moveRight){
    velocity.add( getSideVector().scale(actualMoveSpeed));
  }
  if(moveUp){
    velocity.add( getUpVector().scale(actualMoveSpeed));
  }
  if(moveDown){
    velocity.add( getUpVector().scale(-actualMoveSpeed));
  }


  camera.position.setFrom(velocity);

  if (LookType.active == lookType ) {
    double actualLookSpeed = delta * lookSpeed*100;
    double verticalLookRatio = 1;

    if (constrainVertical ) {
      verticalLookRatio = math.pi / (verticalMax - verticalMin );
    }

    lon -= mouseX * actualLookSpeed;
    if (lookVertical ) lat -= mouseY * actualLookSpeed * verticalLookRatio;

    lat = math.max( - 85, math.min( 85, lat ) );

    double phi = ( 90 - lat ).toRad();
    num theta = lon.toRad();

    if (constrainVertical ) {
      phi = MathUtils.mapLinear( phi, 0, math.pi, verticalMin, verticalMax ).toDouble();
    }

    final position = camera.position;
    targetPosition.setFromSphericalCoords( 1, phi, theta ).add( position );
    camera.lookAt( targetPosition );
  }

}