void dgCollision::SerializeLow (dgSerialize callback, void* const userData) const { dgInt32 signature[4]; signature[0] = dgInt32 (GetSignature ()); signature[1] = GetCollisionPrimityType (); signature[2] = dgInt32 (SetUserDataID()); signature[3] = 0; callback (userData, &signature, sizeof (signature)); callback (userData, &m_offset, sizeof (dgMatrix)); }
dgFloat32 dgCollisionInstance::ConvexRayCast (const dgCollisionInstance* const convexShape, const dgMatrix& convexShapeMatrix, const dgVector& localVeloc, dgFloat32 minT, dgContactPoint& contactOut, OnRayPrecastAction preFilter, const dgBody* const referenceBody, void* const userData, dgInt32 threadId) const { dgFloat32 t = dgFloat32 (1.2f); if ((GetCollisionPrimityType() != m_nullCollision) && (!preFilter || preFilter(referenceBody, this, userData))) { t = m_childShape->ConvexRayCast (convexShape, convexShapeMatrix, localVeloc, minT, contactOut, referenceBody, this, userData, threadId); if (t <= minT) { if (!(m_childShape->IsType(dgCollision::dgCollisionMesh_RTTI) || m_childShape->IsType(dgCollision::dgCollisionCompound_RTTI))) { contactOut.m_shapeId0 = GetUserDataID(); //contactOut.m_shapeId1 = GetUserDataID(); contactOut.m_shapeId1 = convexShape->GetUserDataID(); } contactOut.m_collision0 = this; //contactOut.m_collision1 = this; contactOut.m_collision1 = convexShape; } } return t; }