move zoom delta to InputAction.ZOOM for FreeFlight rotation delegate
This commit is contained in:
@@ -20,7 +20,7 @@ class FreeFlightInputHandlerDelegate implements InputHandlerDelegate {
|
|||||||
static final Vector3 _right = Vector3(1, 0, 0);
|
static final Vector3 _right = Vector3(1, 0, 0);
|
||||||
|
|
||||||
Vector2 _queuedRotationDelta = Vector2.zero();
|
Vector2 _queuedRotationDelta = Vector2.zero();
|
||||||
Vector2 _queuedPanDelta = Vector2.zero();
|
Vector3 _queuedTranslateDelta = Vector3.zero();
|
||||||
double _queuedZoomDelta = 0.0;
|
double _queuedZoomDelta = 0.0;
|
||||||
Vector3 _queuedMoveDelta = Vector3.zero();
|
Vector3 _queuedMoveDelta = Vector3.zero();
|
||||||
|
|
||||||
@@ -49,14 +49,16 @@ class FreeFlightInputHandlerDelegate implements InputHandlerDelegate {
|
|||||||
_queuedRotationDelta += Vector2(delta.x, delta.y);
|
_queuedRotationDelta += Vector2(delta.x, delta.y);
|
||||||
break;
|
break;
|
||||||
case InputAction.TRANSLATE:
|
case InputAction.TRANSLATE:
|
||||||
_queuedPanDelta += Vector2(delta.x, delta.y);
|
_queuedTranslateDelta += delta;
|
||||||
_queuedZoomDelta += delta.z;
|
|
||||||
break;
|
break;
|
||||||
case InputAction.PICK:
|
case InputAction.PICK:
|
||||||
_queuedZoomDelta += delta.z;
|
_queuedZoomDelta += delta.z;
|
||||||
break;
|
break;
|
||||||
case InputAction.NONE:
|
case InputAction.NONE:
|
||||||
break;
|
break;
|
||||||
|
case InputAction.ZOOM:
|
||||||
|
_queuedZoomDelta += delta.z;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +73,7 @@ class FreeFlightInputHandlerDelegate implements InputHandlerDelegate {
|
|||||||
_executing = true;
|
_executing = true;
|
||||||
|
|
||||||
if (_queuedRotationDelta.length2 == 0.0 &&
|
if (_queuedRotationDelta.length2 == 0.0 &&
|
||||||
_queuedPanDelta.length2 == 0.0 &&
|
_queuedTranslateDelta.length2 == 0.0 &&
|
||||||
_queuedZoomDelta == 0.0 &&
|
_queuedZoomDelta == 0.0 &&
|
||||||
_queuedMoveDelta.length2 == 0.0) {
|
_queuedMoveDelta.length2 == 0.0) {
|
||||||
_executing = false;
|
_executing = false;
|
||||||
@@ -79,9 +81,9 @@ class FreeFlightInputHandlerDelegate implements InputHandlerDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final activeCamera = await viewer.getActiveCamera();
|
final activeCamera = await viewer.getActiveCamera();
|
||||||
Matrix4 currentViewMatrix = await activeCamera.getViewMatrix();
|
|
||||||
Matrix4 currentTransform = await viewer.getLocalTransform(await entity);
|
Matrix4 currentTransform = await viewer.getLocalTransform(await entity);
|
||||||
Vector3 currentPosition = currentTransform.getTranslation();
|
|
||||||
Quaternion currentRotation =
|
Quaternion currentRotation =
|
||||||
Quaternion.fromRotation(currentTransform.getRotation());
|
Quaternion.fromRotation(currentTransform.getRotation());
|
||||||
|
|
||||||
@@ -92,10 +94,8 @@ class FreeFlightInputHandlerDelegate implements InputHandlerDelegate {
|
|||||||
|
|
||||||
// Apply rotation
|
// Apply rotation
|
||||||
if (_queuedRotationDelta.length2 > 0.0) {
|
if (_queuedRotationDelta.length2 > 0.0) {
|
||||||
double deltaX =
|
double deltaX = _queuedRotationDelta.x * rotationSensitivity;
|
||||||
_queuedRotationDelta.x * rotationSensitivity;
|
double deltaY = _queuedRotationDelta.y * rotationSensitivity;
|
||||||
double deltaY =
|
|
||||||
_queuedRotationDelta.y * rotationSensitivity;
|
|
||||||
|
|
||||||
Quaternion yawRotation = Quaternion.axisAngle(_up, -deltaX);
|
Quaternion yawRotation = Quaternion.axisAngle(_up, -deltaX);
|
||||||
Quaternion pitchRotation = Quaternion.axisAngle(_right, -deltaY);
|
Quaternion pitchRotation = Quaternion.axisAngle(_right, -deltaY);
|
||||||
@@ -105,15 +105,13 @@ class FreeFlightInputHandlerDelegate implements InputHandlerDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Apply pan
|
// Apply pan
|
||||||
if (_queuedPanDelta.length2 > 0.0) {
|
if (_queuedTranslateDelta.length2 > 0.0) {
|
||||||
Vector3 right = _right.clone()..applyQuaternion(currentRotation);
|
double deltaX = _queuedTranslateDelta.x * panSensitivity;
|
||||||
Vector3 up = _up.clone()..applyQuaternion(currentRotation);
|
double deltaY = _queuedTranslateDelta.y * panSensitivity;
|
||||||
|
double deltaZ = -_queuedTranslateDelta.z * panSensitivity;
|
||||||
|
|
||||||
double deltaX = _queuedPanDelta.x * panSensitivity;
|
relativeTranslation += _right * deltaX + _up * deltaY + _forward * deltaZ;
|
||||||
double deltaY = _queuedPanDelta.y * panSensitivity;
|
_queuedTranslateDelta = Vector3.zero();
|
||||||
|
|
||||||
relativeTranslation += right * deltaX + up * deltaY;
|
|
||||||
_queuedPanDelta = Vector2.zero();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply zoom
|
// Apply zoom
|
||||||
@@ -129,9 +127,10 @@ class FreeFlightInputHandlerDelegate implements InputHandlerDelegate {
|
|||||||
Vector3 right = _right.clone()..applyQuaternion(currentRotation);
|
Vector3 right = _right.clone()..applyQuaternion(currentRotation);
|
||||||
Vector3 up = _up.clone()..applyQuaternion(currentRotation);
|
Vector3 up = _up.clone()..applyQuaternion(currentRotation);
|
||||||
|
|
||||||
relativeTranslation += right * _queuedMoveDelta.x +
|
relativeTranslation += (right * _queuedMoveDelta.x +
|
||||||
up * _queuedMoveDelta.y +
|
up * _queuedMoveDelta.y +
|
||||||
forward * _queuedMoveDelta.z;
|
forward * _queuedMoveDelta.z) *
|
||||||
|
movementSensitivity;
|
||||||
|
|
||||||
_queuedMoveDelta = Vector3.zero();
|
_queuedMoveDelta = Vector3.zero();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user