Map<Integer, Joint> jointMap) {
JointDef jd = null;
switch (joint.getType()) {
case PRISMATIC: {
PrismaticJointDef def = new PrismaticJointDef();
jd = def;
def.enableLimit = joint.getEnableLimit();
def.enableMotor = joint.getEnableMotor();
def.localAnchorA.set(pbToVec(joint.getLocalAnchorA()));
def.localAnchorB.set(pbToVec(joint.getLocalAnchorB()));
def.localAxisA.set(pbToVec(joint.getLocalAxisA()));
def.lowerTranslation = joint.getLowerLimit();
def.maxMotorForce = joint.getMaxMotorForce();
def.motorSpeed = joint.getMotorSpeed();
def.referenceAngle = joint.getRefAngle();
def.upperTranslation = joint.getUpperLimit();
break;
}
case REVOLUTE: {
RevoluteJointDef def = new RevoluteJointDef();
jd = def;
def.enableLimit = joint.getEnableLimit();
def.enableMotor = joint.getEnableMotor();
def.localAnchorA.set(pbToVec(joint.getLocalAnchorA()));
def.localAnchorB.set(pbToVec(joint.getLocalAnchorB()));
def.lowerAngle = joint.getLowerLimit();
def.maxMotorTorque = joint.getMaxMotorTorque();
def.motorSpeed = joint.getMotorSpeed();
def.referenceAngle = joint.getRefAngle();
def.upperAngle = joint.getUpperLimit();
break;
}
case DISTANCE: {
DistanceJointDef def = new DistanceJointDef();
jd = def;
def.localAnchorA.set(pbToVec(joint.getLocalAnchorA()));
def.localAnchorB.set(pbToVec(joint.getLocalAnchorB()));
def.dampingRatio = joint.getDampingRatio();
def.frequencyHz = joint.getFrequency();
def.length = joint.getLength();
break;
}
case PULLEY: {
PulleyJointDef def = new PulleyJointDef();
jd = def;
def.localAnchorA.set(pbToVec(joint.getLocalAnchorA()));
def.localAnchorB.set(pbToVec(joint.getLocalAnchorB()));
def.groundAnchorA.set(pbToVec(joint.getGroundAnchorA()));
def.groundAnchorB.set(pbToVec(joint.getGroundAnchorB()));
def.lengthA = joint.getLengthA();
def.lengthB = joint.getLengthB();
def.ratio = joint.getRatio();
break;
}
case MOUSE: {
MouseJointDef def = new MouseJointDef();
jd = def;
def.dampingRatio = joint.getDampingRatio();
def.frequencyHz = joint.getFrequency();
def.maxForce = joint.getMaxForce();
def.target.set(pbToVec(joint.getTarget()));
break;
}
case GEAR: {
GearJointDef def = new GearJointDef();
jd = def;
if (!jointMap.containsKey(joint.getJoint1())) {
throw new IllegalArgumentException("Index " + joint.getJoint1()
+ " is not present in the joint map.");
}
def.joint1 = jointMap.get(joint.getJoint1());
if (!jointMap.containsKey(joint.getJoint2())) {
throw new IllegalArgumentException("Index " + joint.getJoint2()
+ " is not present in the joint map.");
}
def.joint2 = jointMap.get(joint.getJoint2());
def.ratio = joint.getRatio();
break;
}
case WHEEL: {
WheelJointDef def = new WheelJointDef();
jd = def;
def.localAnchorA.set(pbToVec(joint.getLocalAnchorA()));
def.localAnchorB.set(pbToVec(joint.getLocalAnchorB()));
def.localAxisA.set(pbToVec(joint.getLocalAxisA()));
def.enableMotor = joint.getEnableMotor();
def.maxMotorTorque = joint.getMaxMotorTorque();
def.motorSpeed = joint.getMotorSpeed();
def.frequencyHz = joint.getFrequency();
def.dampingRatio = joint.getDampingRatio();
break;
}
case WELD: {
WeldJointDef def = new WeldJointDef();
jd = def;
def.localAnchorA.set(pbToVec(joint.getLocalAnchorA()));
def.localAnchorB.set(pbToVec(joint.getLocalAnchorB()));
def.referenceAngle = joint.getRefAngle();
def.frequencyHz = joint.getFrequency();
def.dampingRatio = joint.getDampingRatio();
break;
}
case FRICTION: {
FrictionJointDef def = new FrictionJointDef();
jd = def;
def.localAnchorA.set(pbToVec(joint.getLocalAnchorA()));
def.localAnchorB.set(pbToVec(joint.getLocalAnchorB()));
def.maxForce = joint.getMaxForce();
def.maxTorque = joint.getMaxTorque();
break;
}
case ROPE: {
RopeJointDef def = new RopeJointDef();
jd = def;
def.localAnchorA.set(pbToVec(joint.getLocalAnchorA()));
def.localAnchorB.set(pbToVec(joint.getLocalAnchorB()));
def.maxLength = joint.getMaxLength();
return null;
}
case CONSTANT_VOLUME: {
ConstantVolumeJointDef def = new ConstantVolumeJointDef();
jd = def;
def.dampingRatio = joint.getDampingRatio();
def.frequencyHz = joint.getFrequency();
if (joint.getBodiesCount() != joint.getJointsCount()) {
throw new IllegalArgumentException(
"Constant volume joint must have bodies and joints defined");
}
for (int i = 0; i < joint.getBodiesCount(); i++) {
int body = joint.getBodies(i);
if (!argBodyMap.containsKey(body)) {
throw new IllegalArgumentException("Index " + body + " is not present in the body map");
}
int jointIndex = joint.getJoints(i);
if (!jointMap.containsKey(jointIndex)) {
throw new IllegalArgumentException("Index " + jointIndex
+ " is not present in the joint map");
}
Joint djoint = jointMap.get(jointIndex);
if (!(djoint instanceof DistanceJoint)) {
throw new IllegalArgumentException(
"Joints for constant volume joint must be distance joints");
}
def.addBodyAndJoint(argBodyMap.get(body), (DistanceJoint) djoint);
}
break;
}
case LINE: {
UnsupportedObjectException e =