apply custom pair-cache filter to predictive contacts

This commit is contained in:
Stephen Gold
2020-02-13 00:04:42 -08:00
parent b06cdd5fc1
commit 75b05d93ff
2 changed files with 18 additions and 1 deletions

View File

@@ -61,7 +61,8 @@ public:
virtual void cleanOverlappingPair(btBroadphasePair& pair, btDispatcher* dispatcher) = 0;
virtual int getNumOverlappingPairs() const = 0;
virtual bool needsBroadphaseCollision(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1) const = 0; // stephengold added 2020-02-12
virtual btOverlapFilterCallback* getOverlapFilterCallback() = 0; // stephengold added 2020-02-12
virtual void cleanProxyFromPairs(btBroadphaseProxy* proxy, btDispatcher* dispatcher) = 0;
virtual void setOverlapFilterCallback(btOverlapFilterCallback* callback) = 0;
@@ -380,6 +381,14 @@ public:
{
}
bool needsBroadphaseCollision(btBroadphaseProxy*, btBroadphaseProxy*) const // stephengold added 2020-02-12
{ // stephengold added 2020-02-12
return true; // stephengold added 2020-02-12
} // stephengold added 2020-02-12
btOverlapFilterCallback* getOverlapFilterCallback() // stephengold added 2020-02-12
{ // stephengold added 2020-02-12
return 0; // stephengold added 2020-02-12
} // stephengold added 2020-02-12
virtual void setOverlapFilterCallback(btOverlapFilterCallback* /*callback*/)
{
}

View File

@@ -800,6 +800,14 @@ public:
///don't do CCD when the collision filters are not matching
if (!ClosestConvexResultCallback::needsCollision(proxy0))
return false;
if (m_pairCache->getOverlapFilterCallback()) { // stephengold added 2020-02-12
btBroadphaseProxy* proxy1 = m_me->getBroadphaseHandle(); // stephengold added 2020-02-12
bool collides = m_pairCache->needsBroadphaseCollision(proxy0, proxy1); // stephengold added 2020-02-12
if (!collides) // stephengold added 2020-02-12
{ // stephengold added 2020-02-12
return false; // stephengold added 2020-02-12
} // stephengold added 2020-02-12
} // stephengold added 2020-02-12
btCollisionObject* otherObj = (btCollisionObject*)proxy0->m_clientObject;