From 3cac11a3a2e61555c48c559f9caa61b1787e9ddb Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Sat, 11 Oct 2008 20:19:04 +0000 Subject: Last (hopefully) soft body fixes: Enable soft body collision clusters by default. Add option to 'disable collision' button between soft body and rigid body connected by constraint (option was already available between two rigid bodies) --- extern/bullet2/src/BulletSoftBody/btSoftBody.cpp | 10 +++++++++- extern/bullet2/src/BulletSoftBody/btSoftBody.h | 4 +++- .../src/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp | 5 ++++- 3 files changed, 16 insertions(+), 3 deletions(-) (limited to 'extern/bullet2/src') diff --git a/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp b/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp index 1604167b6ef..1ec668c9c78 100644 --- a/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp +++ b/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp @@ -306,8 +306,16 @@ void btSoftBody::appendFace(int node0,int node1,int node2,Material* mat) } // -void btSoftBody::appendAnchor(int node,btRigidBody* body) +void btSoftBody::appendAnchor(int node,btRigidBody* body,bool disableCollisionWithBody=false) { + if (disableCollisionWithBody) + { + if (m_collisionDisabledObjects.findLinearSearch(body)==m_collisionDisabledObjects.size()) + { + m_collisionDisabledObjects.push_back(body); + } + } + Anchor a; a.m_node = &m_nodes[node]; a.m_body = body; diff --git a/extern/bullet2/src/BulletSoftBody/btSoftBody.h b/extern/bullet2/src/BulletSoftBody/btSoftBody.h index 79d272765e0..743462d259a 100644 --- a/extern/bullet2/src/BulletSoftBody/btSoftBody.h +++ b/extern/bullet2/src/BulletSoftBody/btSoftBody.h @@ -49,6 +49,8 @@ struct btSoftBodyWorldInfo class btSoftBody : public btCollisionObject { public: + btAlignedObjectArray m_collisionDisabledObjects; + // // Enumerations // @@ -667,7 +669,7 @@ public: Material* mat=0); /* Append anchor */ void appendAnchor( int node, - btRigidBody* body); + btRigidBody* body,bool disableCollision); /* Append linear joint */ void appendLinearJoint(const LJoint::Specs& specs,Cluster* body0,Body body1); void appendLinearJoint(const LJoint::Specs& specs,Body body=Body()); diff --git a/extern/bullet2/src/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp b/extern/bullet2/src/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp index 835a03b8e3c..e5feb5ef749 100644 --- a/extern/bullet2/src/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp +++ b/extern/bullet2/src/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp @@ -59,7 +59,10 @@ void btSoftRigidCollisionAlgorithm::processCollision (btCollisionObject* body0,b btSoftBody* softBody = m_isSwapped? (btSoftBody*)body1 : (btSoftBody*)body0; btCollisionObject* rigidCollisionObject = m_isSwapped? body0 : body1; - softBody->defaultCollisionHandler(rigidCollisionObject); + if (softBody->m_collisionDisabledObjects.findLinearSearch(rigidCollisionObject)==softBody->m_collisionDisabledObjects.size()) + { + softBody->defaultCollisionHandler(rigidCollisionObject); + } } -- cgit v1.2.3