From 21afafd4e69e6f1a757b1b4737578dd249df7b13 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Fri, 4 Sep 2015 14:07:12 -0700 Subject: [PATCH] fix hold action with zero offsetLength --- libraries/physics/src/ObjectActionSpring.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libraries/physics/src/ObjectActionSpring.cpp b/libraries/physics/src/ObjectActionSpring.cpp index 313b089d1c..89e1d58dff 100644 --- a/libraries/physics/src/ObjectActionSpring.cpp +++ b/libraries/physics/src/ObjectActionSpring.cpp @@ -66,10 +66,15 @@ void ObjectActionSpring::updateActionWorker(btScalar deltaTimeStep) { if (_linearTimeScale < MAX_TIMESCALE) { btVector3 offset = rigidBody->getCenterOfMassPosition() - glmToBullet(_positionalTarget); float offsetLength = offset.length(); - float speed = (offsetLength > FLT_EPSILON) ? glm::min(offsetLength / _linearTimeScale, SPRING_MAX_SPEED) : 0.0f; + btVector3 targetVelocity(0.0f, 0.0f, 0.0f); + + if (offsetLength > 0) { + float speed = (offsetLength > FLT_EPSILON) ? glm::min(offsetLength / _linearTimeScale, SPRING_MAX_SPEED) : 0.0f; + targetVelocity = (-speed / offsetLength) * offset; + } // this action is aggresively critically damped and defeats the current velocity - rigidBody->setLinearVelocity((- speed / offsetLength) * offset); + rigidBody->setLinearVelocity(targetVelocity); } if (_angularTimeScale < MAX_TIMESCALE) {