void BulletPhysics::RemoveGameObject(GameObjectId id) { // remove an object from the physics sim btRigidBody* body = FindBulletRigidBody(id); if (body) { RemoveCollisionObject(body); m_ObjectIdToRigidBody.erase(id); m_RigidBodyToObjectId.erase(body); } }
void CollisionObject::ReInsertIntoWorld() { if(_owner) { auto world = _owner; world->Lock(); world->RemoveCollisionObject(this); world->InsertCollisionObject(this); world->Unlock(); } }
BulletPhysics::~BulletPhysics() { // delete any physics objects still in the world // iterate backwards so the vector doesnt have to move objects for (int i = m_DynamicsWorld->getNumCollisionObjects() - 1; i >= 0; i--) { btCollisionObject* obj = m_DynamicsWorld->getCollisionObjectArray()[i]; RemoveCollisionObject(obj); } m_RigidBodyToObjectId.clear(); // physics objects are smart ptr's and will clean themselves up }