45 if (numOverlappingPairs)
49 for (
int i = 0; i < numOverlappingPairs; i++)
55 if (((colObj0) && ((colObj0)->mergesSimulationIslands())) &&
56 ((colObj1) && ((colObj1)->mergesSimulationIslands())))
59 (colObj1)->getIslandTag());
66 #ifdef STATIC_SIMULATION_ISLAND_OPTIMIZATION 118 #else //STATIC_SIMULATION_ISLAND_OPTIMIZATION 165 #endif //STATIC_SIMULATION_ISLAND_OPTIMIZATION 210 int endIslandIndex = 1;
211 int startIslandIndex;
214 for (startIslandIndex = 0; startIslandIndex < numElem; startIslandIndex = endIslandIndex)
217 for (endIslandIndex = startIslandIndex + 1; (endIslandIndex < numElem) && (
getUnionFind().
getElement(endIslandIndex).m_id == islandId); endIslandIndex++)
223 bool allSleeping =
true;
226 for (idx = startIslandIndex; idx < endIslandIndex; idx++)
251 for (idx = startIslandIndex; idx < endIslandIndex; idx++)
271 for (idx = startIslandIndex; idx < endIslandIndex; idx++)
303 for (i = 0; i < maxNumManifolds; i++)
347 int endIslandIndex = 1;
348 int startIslandIndex;
357 callback->
processIsland(&collisionObjects[0], collisionObjects.
size(), manifold, maxNumManifolds, -1);
384 int startManifoldIndex = 0;
385 int endManifoldIndex = 1;
392 for (startIslandIndex = 0; startIslandIndex < numElem; startIslandIndex = endIslandIndex)
396 bool islandSleeping =
true;
398 for (endIslandIndex = startIslandIndex; (endIslandIndex < numElem) && (
getUnionFind().
getElement(endIslandIndex).m_id == islandId); endIslandIndex++)
404 islandSleeping =
false;
408 int numIslandManifolds = 0;
411 if (startManifoldIndex < numManifolds)
414 if (curIslandId == islandId)
418 for (endManifoldIndex = startManifoldIndex + 1; (endManifoldIndex < numManifolds) && (islandId ==
getIslandId(
m_islandmanifold[endManifoldIndex])); endManifoldIndex++)
422 numIslandManifolds = endManifoldIndex - startManifoldIndex;
432 if (numIslandManifolds)
434 startManifoldIndex = endManifoldIndex;
bool operator()(const btPersistentManifold *lhs, const btPersistentManifold *rhs) const
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)
function object that routes calls to operator<
int getNumContacts() const
btOverlappingPairCache * getPairCache()
btElement & getElement(int index)
void buildAndProcessIslands(btDispatcher *dispatcher, btCollisionWorld *collisionWorld, IslandCallback *callback)
void setHitFraction(btScalar hitFraction)
btCollisionObjectArray & getCollisionObjectArray()
bool isKinematicObject() const
#define SIMD_FORCE_INLINE
int getActivationState() const
void buildIslands(btDispatcher *dispatcher, btCollisionWorld *colWorld)
virtual void updateActivationState(btCollisionWorld *colWorld, btDispatcher *dispatcher)
bool isStaticOrKinematicObject() const
btSimulationIslandManager()
The btOverlappingPairCache provides an interface for overlapping pair management (add, remove, storage), used by the btBroadphaseInterface broadphases.
void activate(bool forceActivation=false) const
btBroadphaseProxy * getBroadphaseHandle()
const btCollisionObject * getBody0() const
btCollisionObject can be used to manage collision detection objects.
bool hasContactResponse() const
void setDeactivationTime(btScalar time)
void initUnionFind(int n)
void setCompanionId(int id)
virtual int getNumOverlappingPairs() const =0
btBroadphaseProxy * m_pProxy1
virtual btPersistentManifold ** getInternalManifoldPointer()=0
int size() const
return the number of elements in the array
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())
const btCollisionObject * getBody1() const
void setIslandTag(int tag)
bool operator()(const btPersistentManifold *lhs, const btPersistentManifold *rhs) const
int getNumElements() const
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
virtual btBroadphasePair * getOverlappingPairArrayPtr()=0
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
void setActivationState(int newState) 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)
btAlignedObjectArray< btCollisionObject * > m_islandBodies
virtual ~btSimulationIslandManager()
The btBroadphasePair class contains a pair of aabb-overlapping objects.