move zoom delta to InputAction.ZOOM for FreeFlight rotation delegate

This commit is contained in:
Nick Fisher
2024-10-10 20:46:34 +08:00
parent 1459aea5cf
commit 254b6d8af2

View File

@@ -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();
} }