From 7da46bca8bf17357ef3d2b530dfcb42f4024bad7 Mon Sep 17 00:00:00 2001 From: dsehnal <david.sehnal@gmail.com> Date: Fri, 24 Mar 2023 19:52:11 +0100 Subject: [PATCH] scale move speed by frametime --- src/mol-canvas3d/controls/trackball.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/mol-canvas3d/controls/trackball.ts b/src/mol-canvas3d/controls/trackball.ts index cb122268d..fc9b7fce0 100644 --- a/src/mol-canvas3d/controls/trackball.ts +++ b/src/mol-canvas3d/controls/trackball.ts @@ -371,11 +371,11 @@ namespace TrackballControls { const moveDir = Vec3(); const moveEye = Vec3(); - function moveCamera() { + function moveCamera(deltaT: number) { Vec3.sub(moveEye, camera.position, camera.target); Vec3.setMagnitude(moveEye, moveEye, camera.state.minNear); - const moveSpeed = p.moveSpeed * (keyState.boostMove === 1 ? p.boostMoveFactor : 1); + const moveSpeed = deltaT * (60 / 1000) * p.moveSpeed * (keyState.boostMove === 1 ? p.boostMoveFactor : 1); if (keyState.moveForward === 1) { Vec3.normalize(moveDir, moveEye); @@ -483,9 +483,11 @@ namespace TrackballControls { /** Update the object's position, direction and up vectors */ function update(t: number) { if (lastUpdated === t) return; + + const deltaT = t - lastUpdated; if (lastUpdated > 0) { - if (p.animate.name === 'spin') spin(t - lastUpdated); - else if (p.animate.name === 'rock') rock(t - lastUpdated); + if (p.animate.name === 'spin') spin(deltaT); + else if (p.animate.name === 'rock') rock(deltaT); } Vec3.sub(_eye, camera.position, camera.target); @@ -501,7 +503,9 @@ namespace TrackballControls { Vec3.add(camera.position, camera.target, _eye); checkDistances(); - moveCamera(); + if (lastUpdated > 0 && deltaT < 1000) { + moveCamera(deltaT); + } Vec3.sub(_eye, camera.position, camera.target); checkDistances(); -- GitLab