public virtual void RemoveCollisionObject(CollisionObject collisionObject) { //bool removeFromBroadphase = false; { BroadphaseProxy bp = collisionObject.GetBroadphaseHandle(); if (bp != null) { // // only clear the cached algorithms // GetBroadphase().GetOverlappingPairCache().CleanProxyFromPairs(bp, m_dispatcher1); GetBroadphase().DestroyProxy(bp, m_dispatcher1); collisionObject.SetBroadphaseHandle(null); } } //swapremove m_collisionObjects.Remove(collisionObject); }
public virtual void AddCollisionObject(CollisionObject collisionObject, CollisionFilterGroups collisionFilterGroup, CollisionFilterGroups collisionFilterMask) { //check that the object isn't already added //btAssert( m_collisionObjects.findLinearSearch(collisionObject) == m_collisionObjects.size()); Debug.Assert(collisionObject != null); //Debug.Assert(!m_collisionObjects.Contains(collisionObject)); if (m_collisionObjects.Contains(collisionObject)) { return; } m_collisionObjects.Add(collisionObject); //calculate new AABB IndexedMatrix trans = collisionObject.GetWorldTransform(); IndexedVector3 minAabb; IndexedVector3 maxAabb; collisionObject.GetCollisionShape().GetAabb(ref trans, out minAabb, out maxAabb); BroadphaseNativeTypes type = collisionObject.GetCollisionShape().GetShapeType(); collisionObject.SetBroadphaseHandle(GetBroadphase().CreateProxy( ref minAabb, ref maxAabb, type, collisionObject, collisionFilterGroup, collisionFilterMask, m_dispatcher1, 0 )); }