From 6a5a74700fa508d03cb8dd9acb1396e1c2dbbb9e Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 12 Jan 2016 12:53:35 -0800 Subject: [PATCH] activate sprung objects when action strong enough --- libraries/physics/src/ObjectActionSpring.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/libraries/physics/src/ObjectActionSpring.cpp b/libraries/physics/src/ObjectActionSpring.cpp index d9d6a323a7..a737a2b8b6 100644 --- a/libraries/physics/src/ObjectActionSpring.cpp +++ b/libraries/physics/src/ObjectActionSpring.cpp @@ -62,9 +62,10 @@ void ObjectActionSpring::updateActionWorker(btScalar deltaTimeStep) { float offsetLength = offset.length(); 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; + float speed = (offsetLength > FLT_EPSILON) ? glm::min(offsetLength / _linearTimeScale, SPRING_MAX_SPEED) : 0.0f; + if (speed > rigidBody->getLinearSleepingThreshold()) { targetVelocity = (-speed / offsetLength) * offset; + rigidBody->activate(); } // this action is aggresively critically damped and defeats the current velocity @@ -90,10 +91,10 @@ void ObjectActionSpring::updateActionWorker(btScalar deltaTimeStep) { // // dQ = Q1 * Q0^ btQuaternion deltaQ = target * bodyRotation.inverse(); - float angle = deltaQ.getAngle(); - const float MIN_ANGLE = 1.0e-4f; - if (angle > MIN_ANGLE) { - targetVelocity = (angle / _angularTimeScale) * deltaQ.getAxis(); + float speed = deltaQ.getAngle() / _angularTimeScale; + if (speed > rigidBody->getAngularSleepingThreshold()) { + targetVelocity = speed * deltaQ.getAxis(); + rigidBody->activate(); } } // this action is aggresively critically damped and defeats the current velocity