///fills the dataBuffer and returns the struct name (and 0 on failure) string serialize( object dataBuffer, btSerializer* serializer ) { btTypedConstraintData2* tcd = (btTypedConstraintData2*)dataBuffer; tcd.m_rbA = (btRigidBodyData*)serializer.getUniquePointer( &m_rbA ); tcd.m_rbB = (btRigidBodyData*)serializer.getUniquePointer( &m_rbB ); char* name = (char*)serializer.findNameForPointer( this ); tcd.m_name = (char*)serializer.getUniquePointer( name ); if( tcd.m_name ) { serializer.serializeName( name ); } tcd.m_objectType = m_objectType; tcd.m_needsFeedback = m_needsFeedback; tcd.m_overrideNumSolverIterations = m_overrideNumSolverIterations; tcd.m_breakingImpulseThreshold = m_breakingImpulseThreshold; tcd.m_isEnabled = m_isEnabled ? 1 : 0; tcd.m_userConstraintId = m_userConstraintId; tcd.m_userConstraintType = m_userConstraintType; tcd.m_appliedImpulse = m_appliedImpulse; tcd.m_dbgDrawSize = m_dbgDrawSize; tcd.m_disableCollisionsBetweenLinkedBodies = false; int i; for( i = 0; i < m_rbA.getNumConstraintRefs(); i++ ) if( m_rbA.getConstraintRef( i ) == this ) tcd.m_disableCollisionsBetweenLinkedBodies = true; for( i = 0; i < m_rbB.getNumConstraintRefs(); i++ ) if( m_rbB.getConstraintRef( i ) == this ) tcd.m_disableCollisionsBetweenLinkedBodies = true; return btTypedConstraintDataName; }