small cleanup in the DemoApplication, removed references to obsolete PHY_ShapeProps/PHY_MaterialProps

removed deletion of motionstate in CcdPhysics/CcdPhysicsController destructor
disabled m_type optimization in SimdTransform (making the memory size 64 byte, potentially more cache friendly)
fixed a bug in island generation, causing the activation not propagating in one frame, but one 'layer' of rigidbodies at a time
This commit is contained in:
ejcoumans
2006-09-26 18:59:29 +00:00
parent 0e04cfc806
commit 37a53ee7d9
8 changed files with 100 additions and 86 deletions

View File

@@ -52,5 +52,6 @@ void CollisionObject::activate()
bool CollisionObject::mergesSimulationIslands() const
{
return ( !(m_collisionFlags & isStatic));
//static objects, and object without contact response don't merge islands
return ( !(m_collisionFlags & (isStatic |noContactResponse )));
}

View File

@@ -34,7 +34,9 @@ class CollisionShape;
struct CollisionObject
{
SimdTransform m_worldTransform;
BroadphaseProxy* m_broadphaseHandle;
CollisionShape* m_collisionShape;
//m_interpolationWorldTransform is used for CCD and interpolation
//it can be either previous or future (predicted) transform
SimdTransform m_interpolationWorldTransform;
@@ -57,8 +59,7 @@ struct CollisionObject
SimdScalar m_friction;
SimdScalar m_restitution;
BroadphaseProxy* m_broadphaseHandle;
CollisionShape* m_collisionShape;
//users can point to their objects, m_userPointer is not used by Bullet
void* m_userObjectPointer;

View File

@@ -36,16 +36,13 @@ void SimulationIslandManager::FindUnions(Dispatcher* dispatcher)
const CollisionObject* colObj0 = static_cast<const CollisionObject*>(manifold->GetBody0());
const CollisionObject* colObj1 = static_cast<const CollisionObject*>(manifold->GetBody1());
if (colObj0 && colObj1 && dispatcher->NeedsResponse(*colObj0,*colObj1))
{
if (((colObj0) && ((colObj0)->mergesSimulationIslands())) &&
((colObj1) && ((colObj1)->mergesSimulationIslands())))
{
if (((colObj0) && ((colObj0)->mergesSimulationIslands())) &&
((colObj1) && ((colObj1)->mergesSimulationIslands())))
{
m_unionFind.unite((colObj0)->m_islandTag1,
(colObj1)->m_islandTag1);
}
}
m_unionFind.unite((colObj0)->m_islandTag1,
(colObj1)->m_islandTag1);
}
}