Update to Box2D 2.2.1 (stop updating, Erin!)

--HG--
branch : box2d-update
This commit is contained in:
Bill Meltsner
2011-09-23 16:09:18 -04:00
parent a565668183
commit 3c7310e76d
39 changed files with 815 additions and 153 deletions
@@ -44,16 +44,21 @@
b2GearJoint::b2GearJoint(const b2GearJointDef* def)
: b2Joint(def)
{
m_typeA = def->joint1->GetType();
m_typeB = def->joint2->GetType();
m_joint1 = def->joint1;
m_joint2 = def->joint2;
m_typeA = m_joint1->GetType();
m_typeB = m_joint2->GetType();
b2Assert(m_typeA == e_revoluteJoint || m_typeA == e_prismaticJoint);
b2Assert(m_typeB == e_revoluteJoint || m_typeB == e_prismaticJoint);
float32 coordinateA, coordinateB;
m_bodyC = def->joint1->GetBodyA();
m_bodyA = def->joint1->GetBodyB();
// TODO_ERIN there might be some problem with the joint edges in b2Joint.
m_bodyC = m_joint1->GetBodyA();
m_bodyA = m_joint1->GetBodyB();
// Get geometry of joint1
b2Transform xfA = m_bodyA->m_xf;
@@ -76,7 +81,7 @@ b2GearJoint::b2GearJoint(const b2GearJointDef* def)
b2PrismaticJoint* prismatic = (b2PrismaticJoint*)def->joint1;
m_localAnchorC = prismatic->m_localAnchorA;
m_localAnchorA = prismatic->m_localAnchorB;
m_referenceAngleA = prismatic->m_refAngle;
m_referenceAngleA = prismatic->m_referenceAngle;
m_localAxisC = prismatic->m_localXAxisA;
b2Vec2 pC = m_localAnchorC;
@@ -84,8 +89,8 @@ b2GearJoint::b2GearJoint(const b2GearJointDef* def)
coordinateA = b2Dot(pA - pC, m_localAxisC);
}
m_bodyD = def->joint2->GetBodyA();
m_bodyB = def->joint2->GetBodyB();
m_bodyD = m_joint2->GetBodyA();
m_bodyB = m_joint2->GetBodyB();
// Get geometry of joint2
b2Transform xfB = m_bodyB->m_xf;
@@ -108,7 +113,7 @@ b2GearJoint::b2GearJoint(const b2GearJointDef* def)
b2PrismaticJoint* prismatic = (b2PrismaticJoint*)def->joint2;
m_localAnchorD = prismatic->m_localAnchorA;
m_localAnchorB = prismatic->m_localAnchorB;
m_referenceAngleB = prismatic->m_refAngle;
m_referenceAngleB = prismatic->m_referenceAngle;
m_localAxisD = prismatic->m_localXAxisA;
b2Vec2 pD = m_localAnchorD;
@@ -315,9 +320,9 @@ bool b2GearJoint::SolvePositionConstraints(const b2SolverData& data)
if (m_typeB == e_revoluteJoint)
{
JvBD.SetZero();
JwB = 1.0f;
JwD = 1.0f;
mass += m_iB + m_iD;
JwB = m_ratio;
JwD = m_ratio;
mass += m_ratio * m_ratio * (m_iB + m_iD);
coordinateB = aB - aD - m_referenceAngleB;
}
@@ -398,3 +403,21 @@ float32 b2GearJoint::GetRatio() const
{
return m_ratio;
}
void b2GearJoint::Dump()
{
int32 indexA = m_bodyA->m_islandIndex;
int32 indexB = m_bodyB->m_islandIndex;
int32 index1 = m_joint1->m_index;
int32 index2 = m_joint2->m_index;
b2Log(" b2GearJointDef jd;\n");
b2Log(" jd.bodyA = bodies[%d];\n", indexA);
b2Log(" jd.bodyB = bodies[%d];\n", indexB);
b2Log(" jd.collideConnected = bool(%d);\n", m_collideConnected);
b2Log(" jd.joint1 = joints[%d];\n", index1);
b2Log(" jd.joint2 = joints[%d];\n", index2);
b2Log(" jd.ratio = %.15lef;\n", m_ratio);
b2Log(" joints[%d] = m_world->CreateJoint(&jd);\n", m_index);
}