serialize btGeneric6DofSpringConstraint
serialize btSoftBody::Joint See also Issue 456
This commit is contained in:
@@ -3353,6 +3353,98 @@ const char* btSoftBody::serialize(void* dataBuffer, class btSerializer* serializ
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
sbd->m_numJoints = m_joints.size();
|
||||
sbd->m_joints = m_joints.size()? (btSoftBodyJointData*) serializer->getUniquePointer((void*)&m_joints[0]) : 0;
|
||||
|
||||
if (sbd->m_joints)
|
||||
{
|
||||
int sz = sizeof(btSoftBodyJointData);
|
||||
int numElem = m_joints.size();
|
||||
btChunk* chunk = serializer->allocate(sz,numElem);
|
||||
btSoftBodyJointData* memPtr = (btSoftBodyJointData*)chunk->m_oldPtr;
|
||||
|
||||
for (int i=0;i<numElem;i++,memPtr++)
|
||||
{
|
||||
memPtr->m_jointType = (int)m_joints[i]->Type();
|
||||
m_joints[i]->m_massmatrix.serializeFloat(memPtr->m_massmatrix);
|
||||
m_joints[i]->m_refs[0].serializeFloat(memPtr->m_refs[0]);
|
||||
m_joints[i]->m_refs[1].serializeFloat(memPtr->m_refs[1]);
|
||||
m_joints[i]->m_drift.serializeFloat(memPtr->m_drift);
|
||||
m_joints[i]->m_sdrift.serializeFloat(memPtr->m_sdrift);
|
||||
memPtr->m_cfm = m_joints[i]->m_cfm;
|
||||
memPtr->m_erp = m_joints[i]->m_erp;
|
||||
memPtr->m_split = m_joints[i]->m_split;
|
||||
memPtr->m_delete = m_joints[i]->m_delete;
|
||||
|
||||
for (int j=0;j<4;j++)
|
||||
{
|
||||
memPtr->m_relPosition[0].m_floats[j] = 0.f;
|
||||
memPtr->m_relPosition[1].m_floats[j] = 0.f;
|
||||
memPtr->m_axis[0].m_floats[j] = 0.f;
|
||||
memPtr->m_axis[1].m_floats[j] = 0.f;
|
||||
}
|
||||
|
||||
memPtr->m_bodyA = 0;
|
||||
memPtr->m_bodyB = 0;
|
||||
if (m_joints[i]->m_bodies[0].m_soft)
|
||||
{
|
||||
memPtr->m_bodyAtype = BT_JOINT_SOFT_BODY_CLUSTER;
|
||||
memPtr->m_bodyA = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[0].m_soft);
|
||||
}
|
||||
if (m_joints[i]->m_bodies[0].m_collisionObject)
|
||||
{
|
||||
memPtr->m_bodyAtype = BT_JOINT_COLLISION_OBJECT;
|
||||
memPtr->m_bodyA = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[0].m_collisionObject);
|
||||
}
|
||||
if (m_joints[i]->m_bodies[0].m_rigid)
|
||||
{
|
||||
memPtr->m_bodyAtype = BT_JOINT_RIGID_BODY;
|
||||
memPtr->m_bodyA = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[0].m_rigid);
|
||||
}
|
||||
|
||||
if (m_joints[i]->m_bodies[1].m_soft)
|
||||
{
|
||||
memPtr->m_bodyBtype = BT_JOINT_SOFT_BODY_CLUSTER;
|
||||
memPtr->m_bodyB = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[1].m_soft);
|
||||
}
|
||||
if (m_joints[i]->m_bodies[1].m_collisionObject)
|
||||
{
|
||||
memPtr->m_bodyBtype = BT_JOINT_COLLISION_OBJECT;
|
||||
memPtr->m_bodyB = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[1].m_collisionObject);
|
||||
}
|
||||
if (m_joints[i]->m_bodies[1].m_rigid)
|
||||
{
|
||||
memPtr->m_bodyBtype = BT_JOINT_RIGID_BODY;
|
||||
memPtr->m_bodyB = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[1].m_rigid);
|
||||
}
|
||||
|
||||
switch (m_joints[i]->Type())
|
||||
{
|
||||
case btSoftBody::Joint::eType::Linear:
|
||||
{
|
||||
btSoftBody::LJoint* lj = (btSoftBody::LJoint*)m_joints[i];
|
||||
lj->m_rpos[0].serializeFloat(memPtr->m_relPosition[0]);
|
||||
lj->m_rpos[1].serializeFloat(memPtr->m_relPosition[1]);
|
||||
break;
|
||||
}
|
||||
case btSoftBody::Joint::eType::Angular:
|
||||
{
|
||||
btSoftBody::AJoint* aj = (btSoftBody::AJoint*) m_joints[i];
|
||||
aj->m_axis[0].serializeFloat(memPtr->m_axis[0]);
|
||||
aj->m_axis[1].serializeFloat(memPtr->m_axis[1]);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
}
|
||||
};
|
||||
}
|
||||
serializer->finalizeChunk(chunk,"btSoftBodyJointData",BT_ARRAY_CODE,(void*) &m_joints[0]);
|
||||
}
|
||||
|
||||
|
||||
return btSoftBodyDataName;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user