public void RecordGhostCollisions(PairCachingGhostObject obj)
{
IOverlappingPairCache cache = obj.GetOverlappingPairCache();
ObjectArray<BroadphasePair> pairs = cache.GetOverlappingPairArray();
DiscreteDynamicsWorld world = (PhysicsScene.World as BulletWorldXNA).world;
PersistentManifoldArray manifoldArray = new PersistentManifoldArray();
BroadphasePair collisionPair;
PersistentManifold contactManifold;
CollisionObject objA;
CollisionObject objB;
ManifoldPoint pt;
int numPairs = pairs.Count;
for (int i = 0; i < numPairs; i++)
{
manifoldArray.Clear();
if (LastCollisionDesc < UpdatedCollisions.Length)
break;
collisionPair = world.GetPairCache().FindPair(pairs[i].m_pProxy0, pairs[i].m_pProxy1);
if (collisionPair == null)
continue;
collisionPair.m_algorithm.GetAllContactManifolds(manifoldArray);
for (int j = 0; j < manifoldArray.Count; j++)
{
contactManifold = manifoldArray[j];
int numContacts = contactManifold.GetNumContacts();
objA = contactManifold.GetBody0() as CollisionObject;
objB = contactManifold.GetBody1() as CollisionObject;
for (int p = 0; p < numContacts; p++)
{
pt = contactManifold.GetContactPoint(p);
if (pt.GetDistance() < 0.0f)
{
RecordCollision(this, objA, objB, pt.GetPositionWorldOnA(), -pt.m_normalWorldOnB,
pt.GetDistance());
break;
}
}
}
}
}