public JointSerializer(RubeScene scene,Json _json) { this.scene = scene; _json.setSerializer(RevoluteJointDef.class, new RevoluteJointDefSerializer()); _json.setSerializer(PrismaticJointDef.class, new PrismaticJointDefSerializer()); _json.setSerializer(PulleyJointDef.class, new PulleyJointDefSerializer()); _json.setSerializer(WeldJointDef.class, new WeldJointDefSerializer()); _json.setSerializer(FrictionJointDef.class, new FrictionJointDefSerializer()); _json.setSerializer(WheelJointDef.class, new WheelJointDefSerializer()); _json.setSerializer(RopeJointDef.class, new RopeJointDefSerializer()); _json.setSerializer(DistanceJointDef.class, new DistanceJointDefSerializer()); _json.setSerializer(GearJointDef.class, new GearJointDefSerializer()); mouseJointDefSerializer = new MouseJointDefSerializer(); _json.setSerializer(MouseJointDef.class, mouseJointDefSerializer); }
@SuppressWarnings("rawtypes") @Override public WheelJointDef read(Json json, JsonValue jsonData, Class type) { WheelJointDef defaults = RubeDefaults.Joint.wheelDef; WheelJointDef def = new WheelJointDef(); Vector2 anchorA = json.readValue("anchorA", Vector2.class, defaults.localAnchorA, jsonData); Vector2 anchorB = json.readValue("anchorB", Vector2.class, defaults.localAnchorB, jsonData); Vector2 localAxisA = json.readValue("localAxisA", Vector2.class, defaults.localAxisA, jsonData); if(anchorA != null && anchorB != null) { def.localAnchorA.set(anchorA); def.localAnchorB.set(anchorB); def.localAxisA.set(localAxisA); def.enableMotor = json.readValue("enableMotor", boolean.class, defaults.enableMotor, jsonData); def.motorSpeed = json.readValue("motorSpeed", float.class, defaults.motorSpeed, jsonData); def.maxMotorTorque = json.readValue("maxMotorTorque", float.class, defaults.maxMotorTorque, jsonData); def.frequencyHz = json.readValue("springFrequency", float.class, defaults.frequencyHz, jsonData); def.dampingRatio = json.readValue("springDampingRatio", float.class, defaults.dampingRatio, jsonData); } return def; }
/** * Creates the joint. * @return This joint. Handy for chaining stuff together. */ @Override public B2FlxWheelJoint create() { ((WheelJointDef) jointDef).initialize(bodyA, bodyB, anchorA, _axis); joint = B2FlxB.world.createJoint(jointDef); return this; }
@Override public JointDef createDef(Body sourceBody, Body targetBody, final Vector2 targetOffset) { WheelJointDef jointDef = new WheelJointDef() {{ enableMotor = true; frequencyHz = suspensionFrequencyHz; dampingRatio = suspensionDampingRatio; }}; Vector2 worldTarget = new Vector2(targetBody.getWorldCenter()).add(targetOffset); jointDef.initialize(sourceBody, targetBody, worldTarget, axisOfMovement); return jointDef; }
public void test_deserializeBug(Vector2 pos){ /* Entity e = factory.build("jeep",pos); PhysicsComponent p = mappers.physics.get(e); WheelJoint j = (WheelJoint) p.getJoint("leftWheelJoint"); logger.debug("Factory \n anchorA: " + j.getAnchorA() + "\n anchorB:" + j.getAnchorB() + " \n localAxis: "+ j.getLocalAxisA() + " \n damping: " + j.getSpringDampingRatio() + "\n frequency" + j.getSpringFrequencyHz()); String data = factory.serialize(e); removeEntity(e); e = factory.deserialize(data); p = mappers.physics.get(e); j = (WheelJoint) p.getJoint("leftWheelJoint"); logger.debug("Deserialized \n anchorA: " + j.getAnchorA() + "\n anchorB:" + j.getAnchorB() + " \n localAxis: "+ j.getLocalAxisA() + " \n damping: " + j.getSpringDampingRatio() + "\n frequency" + j.getSpringFrequencyHz()); addEntity(e); */ World world = App.engine.systems.physics.world; BodyDef bd = new BodyDef(); bd.type = BodyType.DynamicBody; Body body = world.createBody(bd), wheel = world.createBody(bd); PolygonShape rect = new PolygonShape(); rect.setAsBox(2, 1); CircleShape circle = new CircleShape(); circle.setRadius(1); body.createFixture(rect,1); wheel.createFixture(circle,1); Vector2 localAnchor = new Vector2(0,0), localAxis = new Vector2(0,1); WheelJointDef jd = new WheelJointDef(); jd.initialize(body, wheel, localAnchor , localAxis); WheelJoint joint = (WheelJoint)world.createJoint(jd); System.out.println("Local Axis = " + joint.getLocalAxisA()); System.out.println("Local Anchor A = " + joint.getLocalAnchorA()); //joint.getLocalAxisA() seems to be returning localAnchorA }
/** * Genera un cuerpo con forma de caja * @param world El mundo * @param x Posici�n x * @param y Posici�n y * @return El cuerpo creado */ public static Body createCar(World world, float x, float y) { // Definici�n de los cuerpos que definen las 3 partes del coche // (Chasis y dos ruedas) BodyDef bodyDef = new BodyDef(); bodyDef.type = BodyType.DynamicBody; bodyDef.position.set(x, y); // Crea lo que sera el cuerpo del chasis del coche Body chassis = world.createBody(bodyDef); // La forma del chasis PolygonShape box = new PolygonShape(); box.setAsBox(30, 10); // Define las caracter�sticas del chasis FixtureDef chassisDef = new FixtureDef(); // Forma del elemento f�sico chassisDef.shape = box; // Densidad (kg/m^2) chassisDef.density = 10f; // Coeficiente de fricci�n (0 - 1) chassisDef.friction = 0.4f; // Elasticidad (0 - 1) chassisDef.restitution = 0.2f; // A�ade el elemento f�sico al cuerpo del mundo 2D chassis.createFixture(chassisDef); // La forma de las ruedas CircleShape circle = new CircleShape(); circle.setRadius(6f); // Define las caracter�sticas de las ruedas FixtureDef wheelFixture = new FixtureDef(); wheelFixture.shape = circle; wheelFixture.density = 5f; wheelFixture.friction = 0.4f; wheelFixture.restitution = 0.7f; // Rueda izquierda Body leftWheel = world.createBody(bodyDef); leftWheel.createFixture(wheelFixture); // Rueda derecha Body rightWheel = world.createBody(bodyDef); rightWheel.createFixture(wheelFixture); // Une las ruedas a la carrocer�a con Joints WheelJointDef wheelJointDef = new WheelJointDef(); wheelJointDef.bodyA = chassis; wheelJointDef.bodyB = leftWheel; // Suspensi�n (mayor valor m�s r�gida) wheelJointDef.frequencyHz = 2f; // Punto de uni�n con la carrocer�a wheelJointDef.localAnchorA.set(-30f / 2.5f, -20f / 2f); WheelJoint leftJoint = (WheelJoint) world.createJoint(wheelJointDef); // Para la uni�n de la otra rueda s�lo es necesario cambiar algunos par�metros // Los dem�s son iguales wheelJointDef.bodyB = rightWheel; wheelJointDef.localAnchorA.x *= -1; WheelJoint rightJoint = (WheelJoint) world.createJoint(wheelJointDef); box.dispose(); circle.dispose(); return chassis; }
@Override public void reset() { jointDef = new WheelJointDef(); }
public B2FlxWheelJoint setEnableMotor(boolean enableMotor) { ((WheelJointDef)jointDef).enableMotor = enableMotor; return this; }
public B2FlxWheelJoint setMotorSpeed(float motorSpeed) { ((WheelJointDef)jointDef).motorSpeed = motorSpeed; return this; }
public B2FlxWheelJoint setMaxMotorTorque(float maxMotorTorque) { ((WheelJointDef)jointDef).maxMotorTorque = maxMotorTorque; return this; }
public B2FlxWheelJoint setFrequencyHz(float frequencyHz) { ((WheelJointDef)jointDef).frequencyHz = frequencyHz; return this; }
public B2FlxWheelJoint setDampingRatio(float dampingRatio) { ((WheelJointDef)jointDef).dampingRatio = dampingRatio; return this; }
private long createProperJoint(JointDef paramJointDef) { if (paramJointDef.type == JointDef.JointType.DistanceJoint) { DistanceJointDef localDistanceJointDef = (DistanceJointDef)paramJointDef; return jniCreateDistanceJoint(this.addr, localDistanceJointDef.bodyA.addr, localDistanceJointDef.bodyB.addr, localDistanceJointDef.collideConnected, localDistanceJointDef.localAnchorA.x, localDistanceJointDef.localAnchorA.y, localDistanceJointDef.localAnchorB.x, localDistanceJointDef.localAnchorB.y, localDistanceJointDef.length, localDistanceJointDef.frequencyHz, localDistanceJointDef.dampingRatio); } if (paramJointDef.type == JointDef.JointType.FrictionJoint) { FrictionJointDef localFrictionJointDef = (FrictionJointDef)paramJointDef; return jniCreateFrictionJoint(this.addr, localFrictionJointDef.bodyA.addr, localFrictionJointDef.bodyB.addr, localFrictionJointDef.collideConnected, localFrictionJointDef.localAnchorA.x, localFrictionJointDef.localAnchorA.y, localFrictionJointDef.localAnchorB.x, localFrictionJointDef.localAnchorB.y, localFrictionJointDef.maxForce, localFrictionJointDef.maxTorque); } if (paramJointDef.type == JointDef.JointType.GearJoint) { GearJointDef localGearJointDef = (GearJointDef)paramJointDef; return jniCreateGearJoint(this.addr, localGearJointDef.bodyA.addr, localGearJointDef.bodyB.addr, localGearJointDef.collideConnected, localGearJointDef.joint1.addr, localGearJointDef.joint2.addr, localGearJointDef.ratio); } if (paramJointDef.type == JointDef.JointType.MouseJoint) { MouseJointDef localMouseJointDef = (MouseJointDef)paramJointDef; return jniCreateMouseJoint(this.addr, localMouseJointDef.bodyA.addr, localMouseJointDef.bodyB.addr, localMouseJointDef.collideConnected, localMouseJointDef.target.x, localMouseJointDef.target.y, localMouseJointDef.maxForce, localMouseJointDef.frequencyHz, localMouseJointDef.dampingRatio); } if (paramJointDef.type == JointDef.JointType.PrismaticJoint) { PrismaticJointDef localPrismaticJointDef = (PrismaticJointDef)paramJointDef; return jniCreatePrismaticJoint(this.addr, localPrismaticJointDef.bodyA.addr, localPrismaticJointDef.bodyB.addr, localPrismaticJointDef.collideConnected, localPrismaticJointDef.localAnchorA.x, localPrismaticJointDef.localAnchorA.y, localPrismaticJointDef.localAnchorB.x, localPrismaticJointDef.localAnchorB.y, localPrismaticJointDef.localAxisA.x, localPrismaticJointDef.localAxisA.y, localPrismaticJointDef.referenceAngle, localPrismaticJointDef.enableLimit, localPrismaticJointDef.lowerTranslation, localPrismaticJointDef.upperTranslation, localPrismaticJointDef.enableMotor, localPrismaticJointDef.maxMotorForce, localPrismaticJointDef.motorSpeed); } if (paramJointDef.type == JointDef.JointType.PulleyJoint) { PulleyJointDef localPulleyJointDef = (PulleyJointDef)paramJointDef; return jniCreatePulleyJoint(this.addr, localPulleyJointDef.bodyA.addr, localPulleyJointDef.bodyB.addr, localPulleyJointDef.collideConnected, localPulleyJointDef.groundAnchorA.x, localPulleyJointDef.groundAnchorA.y, localPulleyJointDef.groundAnchorB.x, localPulleyJointDef.groundAnchorB.y, localPulleyJointDef.localAnchorA.x, localPulleyJointDef.localAnchorA.y, localPulleyJointDef.localAnchorB.x, localPulleyJointDef.localAnchorB.y, localPulleyJointDef.lengthA, localPulleyJointDef.lengthB, localPulleyJointDef.ratio); } if (paramJointDef.type == JointDef.JointType.RevoluteJoint) { RevoluteJointDef localRevoluteJointDef = (RevoluteJointDef)paramJointDef; return jniCreateRevoluteJoint(this.addr, localRevoluteJointDef.bodyA.addr, localRevoluteJointDef.bodyB.addr, localRevoluteJointDef.collideConnected, localRevoluteJointDef.localAnchorA.x, localRevoluteJointDef.localAnchorA.y, localRevoluteJointDef.localAnchorB.x, localRevoluteJointDef.localAnchorB.y, localRevoluteJointDef.referenceAngle, localRevoluteJointDef.enableLimit, localRevoluteJointDef.lowerAngle, localRevoluteJointDef.upperAngle, localRevoluteJointDef.enableMotor, localRevoluteJointDef.motorSpeed, localRevoluteJointDef.maxMotorTorque); } if (paramJointDef.type == JointDef.JointType.WeldJoint) { WeldJointDef localWeldJointDef = (WeldJointDef)paramJointDef; return jniCreateWeldJoint(this.addr, localWeldJointDef.bodyA.addr, localWeldJointDef.bodyB.addr, localWeldJointDef.collideConnected, localWeldJointDef.localAnchorA.x, localWeldJointDef.localAnchorA.y, localWeldJointDef.localAnchorB.x, localWeldJointDef.localAnchorB.y, localWeldJointDef.referenceAngle); } if (paramJointDef.type == JointDef.JointType.RopeJoint) { RopeJointDef localRopeJointDef = (RopeJointDef)paramJointDef; return jniCreateRopeJoint(this.addr, localRopeJointDef.bodyA.addr, localRopeJointDef.bodyB.addr, localRopeJointDef.collideConnected, localRopeJointDef.localAnchorA.x, localRopeJointDef.localAnchorA.y, localRopeJointDef.localAnchorB.x, localRopeJointDef.localAnchorB.y, localRopeJointDef.maxLength); } if (paramJointDef.type == JointDef.JointType.WheelJoint) { WheelJointDef localWheelJointDef = (WheelJointDef)paramJointDef; return jniCreateWheelJoint(this.addr, localWheelJointDef.bodyA.addr, localWheelJointDef.bodyB.addr, localWheelJointDef.collideConnected, localWheelJointDef.localAnchorA.x, localWheelJointDef.localAnchorA.y, localWheelJointDef.localAnchorB.x, localWheelJointDef.localAnchorB.y, localWheelJointDef.localAxisA.x, localWheelJointDef.localAxisA.y, localWheelJointDef.enableMotor, localWheelJointDef.maxMotorTorque, localWheelJointDef.motorSpeed, localWheelJointDef.frequencyHz, localWheelJointDef.dampingRatio); } return 0L; }
/** * Create a wheel joint. * @param spriteA The first body. * @param spriteB The second body. * @param jointDef The joint definition. */ public B2FlxWheelJoint(B2FlxShape spriteA, B2FlxShape spriteB, WheelJointDef jointDef) { super(spriteA, spriteB, jointDef); }