diff --git a/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp b/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp index 3613b8dc9..653ed96f8 100644 --- a/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp +++ b/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp @@ -434,11 +434,13 @@ void btCollisionWorld::rayTestSingle(const btTransform& rayFromTrans,const btTra btCollisionShape* saveCollisionShape = collisionObject->getCollisionShape(); collisionObject->internalSetTemporaryCollisionShape((btCollisionShape*)childCollisionShape); struct LocalInfoAdder2 : public RayResultCallback { - int m_i; RayResultCallback* m_userCallback; + int m_i; LocalInfoAdder2 (int i, RayResultCallback *user) - : m_i(i), m_userCallback(user) + : m_userCallback(user), + m_i(i) { + m_closestHitFraction = m_userCallback->m_closestHitFraction; } virtual btScalar addSingleResult (btCollisionWorld::LocalRayResult &r, bool b) { @@ -447,13 +449,14 @@ void btCollisionWorld::rayTestSingle(const btTransform& rayFromTrans,const btTra shapeInfo.m_triangleIndex = m_i; if (r.m_localShapeInfo == NULL) r.m_localShapeInfo = &shapeInfo; - return m_userCallback->addSingleResult(r, b); + + const btScalar result = m_userCallback->addSingleResult(r, b); + m_closestHitFraction = m_userCallback->m_closestHitFraction; + return result; } }; LocalInfoAdder2 my_cb(i, &resultCallback); - my_cb.m_closestHitFraction = resultCallback.m_closestHitFraction; - rayTestSingle(rayFromTrans,rayToTrans, collisionObject, @@ -660,7 +663,10 @@ void btCollisionWorld::objectQuerySingle(const btConvexShape* castShape,const bt int m_i; LocalInfoAdder (int i, ConvexResultCallback *user) - : m_userCallback(user),m_i(i) { } + : m_userCallback(user), m_i(i) + { + m_closestHitFraction = m_userCallback->m_closestHitFraction; + } virtual btScalar addSingleResult (btCollisionWorld::LocalConvexResult& r, bool b) { btCollisionWorld::LocalShapeInfo shapeInfo; @@ -668,12 +674,15 @@ void btCollisionWorld::objectQuerySingle(const btConvexShape* castShape,const bt shapeInfo.m_triangleIndex = m_i; if (r.m_localShapeInfo == NULL) r.m_localShapeInfo = &shapeInfo; - return m_userCallback->addSingleResult(r, b); + const btScalar result = m_userCallback->addSingleResult(r, b); + m_closestHitFraction = m_userCallback->m_closestHitFraction; + return result; + } }; LocalInfoAdder my_cb(i, &resultCallback); - my_cb.m_closestHitFraction = resultCallback.m_closestHitFraction; + objectQuerySingle(castShape, convexFromTrans,convexToTrans, collisionObject,