50 if (numOverlappingPairs)
54 for (
int i=0;i<numOverlappingPairs;i++)
60 if (((colObj0) && ((colObj0)->mergesSimulationIslands())) &&
61 ((colObj1) && ((colObj1)->mergesSimulationIslands())))
65 (colObj1)->getIslandTag());
72 #ifdef STATIC_SIMULATION_ISLAND_OPTIMIZATION 126 #else //STATIC_SIMULATION_ISLAND_OPTIMIZATION 177 #endif //STATIC_SIMULATION_ISLAND_OPTIMIZATION 234 int endIslandIndex=1;
235 int startIslandIndex;
239 for ( startIslandIndex=0;startIslandIndex<numElem;startIslandIndex = endIslandIndex)
242 for (endIslandIndex = startIslandIndex+1;(endIslandIndex<numElem) && (
getUnionFind().
getElement(endIslandIndex).m_id == islandId);endIslandIndex++)
248 bool allSleeping =
true;
251 for (idx=startIslandIndex;idx<endIslandIndex;idx++)
277 for (idx=startIslandIndex;idx<endIslandIndex;idx++)
297 for (idx=startIslandIndex;idx<endIslandIndex;idx++)
332 for (i=0;i<maxNumManifolds ;i++)
379 int endIslandIndex=1;
380 int startIslandIndex;
389 callback->
processIsland(&collisionObjects[0],collisionObjects.
size(),manifold,maxNumManifolds, -1);
415 int startManifoldIndex = 0;
416 int endManifoldIndex = 1;
425 for ( startIslandIndex=0;startIslandIndex<numElem;startIslandIndex = endIslandIndex)
430 bool islandSleeping =
true;
432 for (endIslandIndex = startIslandIndex;(endIslandIndex<numElem) && (
getUnionFind().
getElement(endIslandIndex).m_id == islandId);endIslandIndex++)
438 islandSleeping =
false;
443 int numIslandManifolds = 0;
446 if (startManifoldIndex<numManifolds)
449 if (curIslandId == islandId)
453 for (endManifoldIndex = startManifoldIndex+1;(endManifoldIndex<numManifolds) && (islandId ==
getIslandId(
m_islandmanifold[endManifoldIndex]));endManifoldIndex++)
458 numIslandManifolds = endManifoldIndex-startManifoldIndex;
469 if (numIslandManifolds)
471 startManifoldIndex = endManifoldIndex;
btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping...
void push_back(const T &_Val)
void sortIslands()
this is a special operation, destroying the content of btUnionFind.
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
int getIslandId(const btPersistentManifold *lhs)
virtual btPersistentManifold * getManifoldByIndexInternal(int index)=0
static void getElement(int arrayLen, const char *cur, const char *old, char *oldPtr, char *curData)
btAlignedObjectArray< btCollisionObject * > m_islandBodies
function object that routes calls to operator<
btOverlappingPairCache * getPairCache()
btElement & getElement(int index)
void buildAndProcessIslands(btDispatcher *dispatcher, btCollisionWorld *collisionWorld, IslandCallback *callback)
void setHitFraction(btScalar hitFraction)
btCollisionObjectArray & getCollisionObjectArray()
#define SIMD_FORCE_INLINE
const btCollisionObject * getBody0() const
void buildIslands(btDispatcher *dispatcher, btCollisionWorld *colWorld)
virtual void updateActivationState(btCollisionWorld *colWorld, btDispatcher *dispatcher)
btSimulationIslandManager()
bool hasContactResponse() const
The btOverlappingPairCache provides an interface for overlapping pair management (add, remove, storage), used by the btBroadphaseInterface broadphases.
void setActivationState(int newState) const
int size() const
return the number of elements in the array
btBroadphaseProxy * getBroadphaseHandle()
bool isKinematicObject() const
bool isStaticOrKinematicObject() const
btCollisionObject can be used to manage collision detection objects.
void setDeactivationTime(btScalar time)
void initUnionFind(int n)
void setCompanionId(int id)
virtual int getNumOverlappingPairs() const =0
btBroadphaseProxy * m_pProxy1
virtual btPersistentManifold ** getInternalManifoldPointer()=0
void activate(bool forceActivation=false) const
btBroadphaseProxy * m_pProxy0
virtual int getNumManifolds() const =0
CollisionWorld is interface and container for the collision detection.
virtual void processIsland(btCollisionObject **bodies, int numBodies, class btPersistentManifold **manifolds, int numManifolds, int islandId)=0
btDispatcherInfo & getDispatchInfo()
#define WANTS_DEACTIVATION
void resize(int newsize, const T &fillData=T())
int getNumContacts() const
void setIslandTag(int tag)
virtual void storeIslandActivationState(btCollisionWorld *world)
btAlignedObjectArray< btPersistentManifold * > m_islandmanifold
virtual bool needsResponse(const btCollisionObject *body0, const btCollisionObject *body1)=0
#define DISABLE_DEACTIVATION
btUnionFind & getUnionFind()
bool m_deterministicOverlappingPairs
int getNumElements() const
virtual btBroadphasePair * getOverlappingPairArrayPtr()=0
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
int getActivationState() const
const btCollisionObject * getBody1() const
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
void quickSort(const L &CompareFunc)
void findUnions(btDispatcher *dispatcher, btCollisionWorld *colWorld)
virtual ~btSimulationIslandManager()
The btBroadphasePair class contains a pair of aabb-overlapping objects.