Add serialization for btRigidBody (all work-in-progress)

This commit is contained in:
erwin.coumans
2009-12-09 14:11:13 +00:00
parent 3edd806b88
commit 91f1e8117b
2 changed files with 76 additions and 1 deletions

View File

@@ -315,3 +315,39 @@ void btRigidBody::removeConstraintRef(btTypedConstraint* c)
m_constraintRefs.remove(c);
m_checkCollideWith = m_constraintRefs.size() > 0;
}
int btRigidBody::calculateSerializeBufferSize() const
{
int sz = sizeof(btRigidBodyData);
return sz;
}
///fills the dataBuffer and returns the struct name (and 0 on failure)
const char* btRigidBody::serialize(void* dataBuffer) const
{
btRigidBodyData* rbd = (btRigidBodyData*) dataBuffer;
m_invInertiaTensorWorld.serialize(rbd->m_invInertiaTensorWorld);
m_linearVelocity.serialize(rbd->m_linearVelocity);
m_angularVelocity.serialize(rbd->m_angularVelocity);
rbd->m_inverseMass = m_inverseMass;
m_angularFactor.serialize(rbd->m_angularFactor);
m_linearFactor.serialize(rbd->m_linearFactor);
m_gravity.serialize(rbd->m_gravity);
m_gravity_acceleration.serialize(rbd->m_gravity_acceleration);
m_invInertiaLocal.serialize(rbd->m_invInertiaLocal);
m_totalForce.serialize(rbd->m_totalForce);
m_totalTorque.serialize(rbd->m_totalTorque);
rbd->m_linearDamping = m_linearDamping;
rbd->m_angularDamping = m_angularDamping;
rbd->m_additionalDamping = m_additionalDamping;
rbd->m_additionalDampingFactor = m_additionalDampingFactor;
rbd->m_additionalLinearDampingThresholdSqr = m_additionalLinearDampingThresholdSqr;
rbd->m_additionalAngularDampingThresholdSqr = m_additionalAngularDampingThresholdSqr;
rbd->m_additionalAngularDampingFactor = m_additionalAngularDampingFactor;
rbd->m_linearSleepingThreshold=m_linearSleepingThreshold;
rbd->m_angularSleepingThreshold = m_angularSleepingThreshold;
btCollisionObject::serialize(&rbd->m_collisionObjectData);
return "btRigidBodyData";
}

View File

@@ -75,7 +75,6 @@ class btRigidBody : public btCollisionObject
public:
///The btRigidBodyConstructionInfo structure provides information to create a rigid body. Setting mass to zero creates a fixed (non-dynamic) rigid body.
///For dynamic objects, you can use the collision shape to approximate the local inertia tensor, otherwise use the zero vector (default argument)
///You can use the motion state to synchronize the world transform between physics and graphics objects.
@@ -495,6 +494,46 @@ public:
}
int m_debugBodyId;
virtual int calculateSerializeBufferSize() const;
///fills the dataBuffer and returns the struct name (and 0 on failure)
virtual const char* serialize(void* dataBuffer) const;
};
//@todo add m_optionalMotionState and m_constraintRefs to btRigidBodyData
///btRigidBodyData is used for btRigidBody serialization
struct btRigidBodyData
{
btMatrix3x3Data m_invInertiaTensorWorld;
btVector3Data m_linearVelocity;
btVector3Data m_angularVelocity;
btScalar m_inverseMass;
btVector3Data m_angularFactor;
btVector3Data m_linearFactor;
btVector3Data m_gravity;
btVector3Data m_gravity_acceleration;
btVector3Data m_invInertiaLocal;
btVector3Data m_totalForce;
btVector3Data m_totalTorque;
btScalar m_linearDamping;
btScalar m_angularDamping;
int m_additionalDamping;
btScalar m_additionalDampingFactor;
btScalar m_additionalLinearDampingThresholdSqr;
btScalar m_additionalAngularDampingThresholdSqr;
btScalar m_additionalAngularDampingFactor;
btScalar m_linearSleepingThreshold;
btScalar m_angularSleepingThreshold;
btCollisionObjectData m_collisionObjectData;
};