builder.setFrequency(j.getFrequency());
builder.setDampingRatio(j.getDampingRatio());
break;
}
case GEAR: {
GearJoint j = (GearJoint) joint;
builder.setType(PbJointType.GEAR);
builder.setRatio(j.getRatio());
if (!argJointIndexMap.containsKey(j.getJoint1())) {
throw new IllegalArgumentException("Joint 1 not in map");
}
int j1 = argJointIndexMap.get(j.getJoint1());
if (!argJointIndexMap.containsKey(j.getJoint2())) {
throw new IllegalArgumentException("Joint 2 not in map");
}
int j2 = argJointIndexMap.get(j.getJoint2());
builder.setJoint1(j1);
builder.setJoint2(j2);
break;
}
case FRICTION: {
FrictionJoint j = (FrictionJoint) joint;
builder.setType(PbJointType.FRICTION);
builder.setLocalAnchorA(vecToPb(j.getLocalAnchorA()));
builder.setLocalAnchorB(vecToPb(j.getLocalAnchorB()));
builder.setMaxForce(j.getMaxForce());
builder.setMaxTorque(j.getMaxTorque());
break;
}
case CONSTANT_VOLUME: {
ConstantVolumeJoint j = (ConstantVolumeJoint) joint;
builder.setType(PbJointType.CONSTANT_VOLUME);
for (int i = 0; i < j.getBodies().length; i++) {
Body b = j.getBodies()[i];
DistanceJoint djoint = j.getJoints()[i];
if (!argBodyIndexMap.containsKey(b)) {
throw new IllegalArgumentException("Body " + b + " is not present in the index map");
}
builder.addBodies(argBodyIndexMap.get(b));
if (!argJointIndexMap.containsKey(djoint)) {
throw new IllegalArgumentException("Joint " + djoint
+ " is not present in the index map");
}
builder.addJoints(argJointIndexMap.get(djoint));
}
break;
}
case WHEEL: {
WheelJoint j = (WheelJoint) joint;
builder.setType(PbJointType.WHEEL);
builder.setLocalAnchorA(vecToPb(j.getLocalAnchorA()));
builder.setLocalAnchorB(vecToPb(j.getLocalAnchorB()));
builder.setLocalAxisA(vecToPb(j.getLocalAxisA()));
builder.setEnableMotor(j.isMotorEnabled());
builder.setMaxMotorTorque(j.getMaxMotorTorque());
builder.setMotorSpeed(j.getMotorSpeed());
builder.setFrequency(j.getSpringFrequencyHz());
builder.setDampingRatio(j.getSpringDampingRatio());
break;
}
case ROPE: {
RopeJoint j = (RopeJoint) joint;
builder.setType(PbJointType.ROPE);
builder.setLocalAnchorA(vecToPb(j.getLocalAnchorA()));
builder.setLocalAnchorB(vecToPb(j.getLocalAnchorB()));
builder.setMaxLength(j.getMaxLength());
break;
}
case WELD: {
WeldJoint j = (WeldJoint) joint;
builder.setType(PbJointType.WELD);
builder.setLocalAnchorA(vecToPb(j.getLocalAnchorA()));
builder.setLocalAnchorB(vecToPb(j.getLocalAnchorB()));
builder.setRefAngle(j.getReferenceAngle());
builder.setFrequency(j.getFrequency());
builder.setDampingRatio(j.getDampingRatio());
break;
}
default:
UnsupportedObjectException e = new UnsupportedObjectException("Unknown joint type: "
+ joint.getType(), Type.JOINT);