private Joint createPrismaticJoint(Body anchor, Body car, Vector2 start) { PrismaticJointDef pjd = new PrismaticJointDef(); pjd.bodyA = anchor; pjd.bodyB = car; pjd.collideConnected = false; pjd.enableLimit = true; pjd.localAnchorA.set(start); pjd.localAnchorB.set(Vector2.Zero); pjd.localAxisA.set(-1,0); pjd.lowerTranslation = -150; pjd.upperTranslation = 150; pjd.maxMotorForce = 0; pjd.motorSpeed = 0; pjd.enableMotor = false; return world.createJoint(pjd); }
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 PrismaticJointDef read(Json json, JsonValue jsonData, Class type) { PrismaticJointDef defaults = RubeDefaults.Joint.prismaticDef; PrismaticJointDef def = new PrismaticJointDef(); Vector2 anchorA = json.readValue("anchorA", Vector2.class, defaults.localAnchorA, jsonData); Vector2 anchorB = json.readValue("anchorB", Vector2.class, defaults.localAnchorB, jsonData); if(anchorA != null && anchorB != null) { def.localAnchorA.set(anchorA); def.localAnchorB.set(anchorB); Vector2 localAxis = json.readValue("localAxisA", Vector2.class, defaults.localAxisA, jsonData); if(localAxis == null) localAxis = json.readValue("localAxis1", Vector2.class, defaults.localAxisA, jsonData); if(localAxis!=null) def.localAxisA.set(localAxis); def.referenceAngle = json.readValue("refAngle", float.class, defaults.referenceAngle, jsonData); def.enableLimit = json.readValue("enableLimit", boolean.class, defaults.enableLimit, jsonData); def.lowerTranslation = json.readValue("lowerLimit", float.class, defaults.lowerTranslation, jsonData); def.upperTranslation = json.readValue("upperLimit", float.class, defaults.upperTranslation, jsonData); def.enableMotor = json.readValue("enableMotor", boolean.class, defaults.enableMotor, jsonData); def.motorSpeed = json.readValue("motorSpeed", float.class, defaults.motorSpeed, jsonData); def.maxMotorForce = json.readValue("maxMotorForce", float.class, defaults.maxMotorForce, jsonData); } return def; }
/** * Creates the joint. */ @Override public B2FlxPrismaticJoint create() { ((PrismaticJointDef) jointDef).initialize(bodyA, bodyB, anchorA, _axis); joint = B2FlxB.world.createJoint(jointDef); return this; }
@Override public JointDef createDef(Body sourceBody, Body targetBody, final Vector2 targetOffset) { PrismaticJointDef jointDef = new PrismaticJointDef() {{ enableLimit = true; enableMotor = true; lowerTranslation = PrismaticJointConfig.this.lowerTranslation; upperTranslation = PrismaticJointConfig.this.upperTranslation; }}; Vector2 worldTarget = new Vector2(targetBody.getWorldCenter()).add(targetOffset); jointDef.initialize(sourceBody, targetBody, worldTarget, axisOfMovement); return jointDef; }
@Override public void reset() { jointDef = new PrismaticJointDef(); }
@Override public void createPhysicsActor(ParticleSystem particleSystem, World physicsWorld) { super.createPhysicsActor(particleSystem, physicsWorld); pos.sub(getWidth() / 2, getHeight() / 2); PolygonShape polygonShape = new PolygonShape(); polygonShape.setAsBox(getPhysicsWidth() / 2, getPhysicsHeight() / 2.4f, new Vector2(0, getPhysicsHeight() / -15f), 0); offset.set(-getWidth() / 2, -getHeight() / 2); sprite.setOrigin(getWidth() / 2, getHeight() / 2); FixtureDef fixtureDef = new FixtureDef(); fixtureDef.shape = polygonShape; fixtureDef.density = 1; fixtureDef.friction = 10.4f; BodyDef bodyDef = new BodyDef(); bodyDef.position.set(pos.cpy().scl(GameWorld.WORLD_TO_BOX)); bodyDef.type = bodyType != null ? bodyType : BodyDef.BodyType.DynamicBody; body = physicsWorld.createBody(bodyDef); body.createFixture(fixtureDef); body.resetMassData(); polygonShape.dispose(); polygonShape = new PolygonShape(); polygonShape.setAsBox(getPhysicsWidth() / 3, getPhysicsHeight() / 20f); offset.set(-getWidth() / 2, -getHeight() / 2); sprite.setOrigin(getWidth() / 2, getHeight() / 2); fixtureDef = new FixtureDef(); fixtureDef.shape = polygonShape; fixtureDef.density = 1; fixtureDef.friction = 10.4f; bodyDef = new BodyDef(); bodyDef.position.set(pos.cpy().add(0, getHeight() / 2.5f).scl(GameWorld.WORLD_TO_BOX)); bodyDef.type = BodyDef.BodyType.DynamicBody; topBody = physicsWorld.createBody(bodyDef); topBody.createFixture(fixtureDef); topBody.resetMassData(); polygonShape.dispose(); PrismaticJointDef jointDef = new PrismaticJointDef(); jointDef.initialize(body, topBody, pos.cpy().scl(GameWorld.WORLD_TO_BOX), new Vector2(0.0f, 1.0f)); jointDef.enableLimit = true; jointDef.upperTranslation = 0.02f; //jointDef.referenceAngle = 1; jointDef.collideConnected = true; jointDef.enableMotor = true; jointDef.motorSpeed = 2f; jointDef.maxMotorForce = 2f; distanceJoint = (PrismaticJoint)physicsWorld.createJoint(jointDef); setRotation(rot); }
public B2FlxPrismaticJoint setEnableLimit(boolean enableLimit) { ((PrismaticJointDef)jointDef).enableLimit = enableLimit; return this; }
public B2FlxPrismaticJoint setEnableMotor(boolean enableMotor) { ((PrismaticJointDef)jointDef).enableMotor = enableMotor; return this; }
public B2FlxPrismaticJoint setMotorSpeed(float motorSpeed) { ((PrismaticJointDef)jointDef).motorSpeed = motorSpeed; return this; }
public B2FlxPrismaticJoint setMaxMotorForce(float maxMotorForce) { ((PrismaticJointDef)jointDef).maxMotorForce = maxMotorForce; return this; }
public B2FlxPrismaticJoint setUpperTranslation(float upperTranslation) { ((PrismaticJointDef)jointDef).upperTranslation = upperTranslation; return this; }
public B2FlxPrismaticJoint setLowerTranslation(float lowerTranslation) { ((PrismaticJointDef)jointDef).lowerTranslation = lowerTranslation; 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; }
/** * Creates a prismatic joint. * @param spriteA The first body. * @param spriteB The second body. * @param jointDef The joint definition. */ public B2FlxPrismaticJoint(B2FlxShape spriteA, B2FlxShape spriteB, PrismaticJointDef jointDef) { super(spriteA, spriteB, jointDef); }