Applied patch to avoid "Assert in ClosestConvexResultCallback::addSingleResult",
Thanks to Paul Dubois for the report and patch, see Issue 396 Also Issue 415
This commit is contained in:
@@ -434,11 +434,13 @@ void btCollisionWorld::rayTestSingle(const btTransform& rayFromTrans,const btTra
|
|||||||
btCollisionShape* saveCollisionShape = collisionObject->getCollisionShape();
|
btCollisionShape* saveCollisionShape = collisionObject->getCollisionShape();
|
||||||
collisionObject->internalSetTemporaryCollisionShape((btCollisionShape*)childCollisionShape);
|
collisionObject->internalSetTemporaryCollisionShape((btCollisionShape*)childCollisionShape);
|
||||||
struct LocalInfoAdder2 : public RayResultCallback {
|
struct LocalInfoAdder2 : public RayResultCallback {
|
||||||
int m_i;
|
|
||||||
RayResultCallback* m_userCallback;
|
RayResultCallback* m_userCallback;
|
||||||
|
int m_i;
|
||||||
LocalInfoAdder2 (int i, RayResultCallback *user)
|
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)
|
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;
|
shapeInfo.m_triangleIndex = m_i;
|
||||||
if (r.m_localShapeInfo == NULL)
|
if (r.m_localShapeInfo == NULL)
|
||||||
r.m_localShapeInfo = &shapeInfo;
|
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);
|
LocalInfoAdder2 my_cb(i, &resultCallback);
|
||||||
my_cb.m_closestHitFraction = resultCallback.m_closestHitFraction;
|
|
||||||
|
|
||||||
|
|
||||||
rayTestSingle(rayFromTrans,rayToTrans,
|
rayTestSingle(rayFromTrans,rayToTrans,
|
||||||
collisionObject,
|
collisionObject,
|
||||||
@@ -660,7 +663,10 @@ void btCollisionWorld::objectQuerySingle(const btConvexShape* castShape,const bt
|
|||||||
int m_i;
|
int m_i;
|
||||||
|
|
||||||
LocalInfoAdder (int i, ConvexResultCallback *user)
|
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)
|
virtual btScalar addSingleResult (btCollisionWorld::LocalConvexResult& r, bool b)
|
||||||
{
|
{
|
||||||
btCollisionWorld::LocalShapeInfo shapeInfo;
|
btCollisionWorld::LocalShapeInfo shapeInfo;
|
||||||
@@ -668,12 +674,15 @@ void btCollisionWorld::objectQuerySingle(const btConvexShape* castShape,const bt
|
|||||||
shapeInfo.m_triangleIndex = m_i;
|
shapeInfo.m_triangleIndex = m_i;
|
||||||
if (r.m_localShapeInfo == NULL)
|
if (r.m_localShapeInfo == NULL)
|
||||||
r.m_localShapeInfo = &shapeInfo;
|
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);
|
LocalInfoAdder my_cb(i, &resultCallback);
|
||||||
my_cb.m_closestHitFraction = resultCallback.m_closestHitFraction;
|
|
||||||
|
|
||||||
objectQuerySingle(castShape, convexFromTrans,convexToTrans,
|
objectQuerySingle(castShape, convexFromTrans,convexToTrans,
|
||||||
collisionObject,
|
collisionObject,
|
||||||
|
|||||||
Reference in New Issue
Block a user