collisionObject: renamed uniqueId to worldArrayIndex; removed linear search in removeCollisionObject
This commit is contained in:
@@ -115,7 +115,9 @@ void btCollisionWorld::addCollisionObject(btCollisionObject* collisionObject,sho
|
||||
|
||||
//check that the object isn't already added
|
||||
btAssert( m_collisionObjects.findLinearSearch(collisionObject) == m_collisionObjects.size());
|
||||
btAssert(collisionObject->getWorldArrayIndex() == -1); // do not add the same object to more than one collision world
|
||||
|
||||
collisionObject->setWorldArrayIndex(m_collisionObjects.size());
|
||||
m_collisionObjects.push_back(collisionObject);
|
||||
|
||||
//calculate new AABB
|
||||
@@ -195,6 +197,7 @@ void btCollisionWorld::updateAabbs()
|
||||
for ( int i=0;i<m_collisionObjects.size();i++)
|
||||
{
|
||||
btCollisionObject* colObj = m_collisionObjects[i];
|
||||
btAssert(colObj->getWorldArrayIndex() == i);
|
||||
|
||||
//only update aabb of active objects
|
||||
if (m_forceUpdateAllAabbs || colObj->isActive())
|
||||
@@ -253,9 +256,25 @@ void btCollisionWorld::removeCollisionObject(btCollisionObject* collisionObject)
|
||||
}
|
||||
|
||||
|
||||
//swapremove
|
||||
m_collisionObjects.remove(collisionObject);
|
||||
|
||||
int iObj = collisionObject->getWorldArrayIndex();
|
||||
btAssert(iObj >= 0 && iObj < m_collisionObjects.size()); // trying to remove an object that was never added or already removed previously?
|
||||
if (iObj >= 0 && iObj < m_collisionObjects.size())
|
||||
{
|
||||
btAssert(collisionObject == m_collisionObjects[iObj]);
|
||||
m_collisionObjects.swap(iObj, m_collisionObjects.size()-1);
|
||||
m_collisionObjects.pop_back();
|
||||
if (iObj < m_collisionObjects.size())
|
||||
{
|
||||
m_collisionObjects[iObj]->setWorldArrayIndex(iObj);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// slow linear search
|
||||
//swapremove
|
||||
m_collisionObjects.remove(collisionObject);
|
||||
}
|
||||
collisionObject->setWorldArrayIndex(-1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user