TiXmlElement *cpSpaceSerializer::createConstraintElm(cpConstraint* constraint)
{
	TiXmlElement *elm;
	
	CPSS_ID id, body_a_id, body_b_id;
	if (delegate)
	{
		id = delegate->makeId(constraint);
		delegate->writing(constraint, id);
		
		body_a_id = delegate->makeId(constraint->a);
		body_b_id = delegate->makeId(constraint->b);
	}
	else
	{
		id = CPSS_DEFAULT_MAKE_ID(constraint);
		body_a_id = CPSS_DEFAULT_MAKE_ID(constraint->a);
		body_b_id = CPSS_DEFAULT_MAKE_ID(constraint->b);
	}
    
    //Correct id's for staticBody
    if (constraint->a == _space->staticBody)
        body_a_id = 0;
    if (constraint->b == _space->staticBody)
        body_b_id = 0;
    
	//Specific	
	const cpConstraintClass *klass = constraint->CP_PRIVATE(klass);
	
	if(klass == cpPinJointGetClass())
		elm = createPinJointElm((cpPinJoint*)constraint);
	else if(klass == cpSlideJointGetClass())
		elm = createSlideJointElm((cpSlideJoint*)constraint);
	else if(klass == cpPivotJointGetClass())
		elm = createPivotJointElm((cpPivotJoint*)constraint);
	else if(klass == cpGrooveJointGetClass())
		elm = createGrooveJointElm((cpGrooveJoint*)constraint);
	else if (klass == cpSimpleMotorGetClass())
		elm = createMotorJointElm((cpSimpleMotor*)constraint);
	else if (klass == cpGearJointGetClass())
		elm = createGearJointElm((cpGearJoint*)constraint);
	else if(klass == cpDampedSpringGetClass())
		elm = createSpringJointElm((cpDampedSpring*)constraint);
	else if(klass == cpRotaryLimitJointGetClass())
		elm = createRotaryLimitJointElm((cpRotaryLimitJoint*)constraint);
	else if(klass == cpRatchetJointGetClass())
		elm = createRatchetJointElm((cpRatchetJoint*)constraint);
	else if(klass == cpDampedRotarySpringGetClass())
		elm = createRotarySpringJointElm((cpDampedRotarySpring*)constraint);
	else
		elm = new TiXmlElement("unknown");

	//Generic
	elm->LinkEndChild(createValueElm("id", id));
	elm->LinkEndChild(createValueElm("body_a_id", body_a_id));
	elm->LinkEndChild(createValueElm("body_b_id", body_b_id));

	elm->LinkEndChild(createValueElm("maxForce", constraint->maxForce));
	elm->LinkEndChild(createValueElm("errorBias", constraint->errorBias));
	elm->LinkEndChild(createValueElm("maxBias", constraint->maxBias));	
	
	return elm;
}
Example #2
0
const cpConstraintClass *RotaryLimitJoint::getClass()
{
		return cpRotaryLimitJointGetClass();
}