void clean() { if (!m_dynamicsWorld) return; for (int i = m_dynamicsWorld->getNumCollisionObjects() - 1; i >= 0; i--) { btCollisionObject *obj = m_dynamicsWorld->getCollisionObjectArray()[i]; btRigidBody *body = btRigidBody::upcast(obj); if (body && body->getMotionState()) delete body->getMotionState(); if (body && body->getCollisionShape()) delete body->getCollisionShape(); m_dynamicsWorld->removeCollisionObject(obj); delete obj; } SAFE_DELETE(m_dynamicsWorld); SAFE_DELETE(m_solver); SAFE_DELETE(m_overlappingPairCache); SAFE_DELETE(m_dispatcher); SAFE_DELETE(m_collisionConfiguration); SAFE_DELETE(m_debugDraw); }