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