Search in sources :

Example 1 with ChainShape

use of com.badlogic.gdx.physics.box2d.ChainShape in project RubeLoader by tescott.

the class FixtureSerializer method read.

@SuppressWarnings("rawtypes")
@Override
public Fixture read(Json json, JsonValue jsonData, Class type) {
    if (body == null)
        return null;
    json.setIgnoreUnknownFields(true);
    FixtureDef defaults = RubeDefaults.Fixture.definition;
    FixtureDef def = new FixtureDef();
    json.readFields(def, jsonData);
    def.friction = json.readValue("friction", float.class, defaults.friction, jsonData);
    def.density = json.readValue("density", float.class, defaults.density, jsonData);
    def.restitution = json.readValue("restitution", float.class, defaults.restitution, jsonData);
    def.isSensor = json.readValue("sensor", boolean.class, defaults.isSensor, jsonData);
    def.filter.maskBits = json.readValue("filter-maskBits", short.class, defaults.filter.maskBits, jsonData);
    def.filter.categoryBits = json.readValue("filter-categoryBits", short.class, defaults.filter.categoryBits, jsonData);
    def.filter.groupIndex = json.readValue("filter-groupIndex", short.class, defaults.filter.groupIndex, jsonData);
    CircleShape circle = json.readValue("circle", CircleShape.class, jsonData);
    if (circle != null) {
        def.shape = circle;
    } else {
        EdgeShape edge = json.readValue("edge", EdgeShape.class, jsonData);
        if (edge != null) {
            def.shape = edge;
        } else {
            chainShapeSerializer.setReadLoop(false);
            ChainShape chain = json.readValue("chain", ChainShape.class, jsonData);
            if (chain != null) {
                def.shape = chain;
            } else {
                chainShapeSerializer.setReadLoop(true);
                chain = json.readValue("loop", ChainShape.class, jsonData);
                if (chain != null) {
                    def.shape = chain;
                } else {
                    PolygonShape polygon = json.readValue("polygon", PolygonShape.class, jsonData);
                    if (polygon != null) {
                        def.shape = polygon;
                    } else {
                        edge = json.readValue("polygon", EdgeShape.class, jsonData);
                        if (edge != null) {
                            def.shape = edge;
                        }
                    }
                }
            }
        }
    }
    Fixture fixture = body.createFixture(def);
    def.shape.dispose();
    scene.parseCustomProperties(json, fixture, jsonData);
    String name = json.readValue("name", String.class, jsonData);
    if (name != null) {
        scene.putNamed(name, fixture);
    }
    return fixture;
}
Also used : EdgeShape(com.badlogic.gdx.physics.box2d.EdgeShape) PolygonShape(com.badlogic.gdx.physics.box2d.PolygonShape) CircleShape(com.badlogic.gdx.physics.box2d.CircleShape) Fixture(com.badlogic.gdx.physics.box2d.Fixture) ChainShape(com.badlogic.gdx.physics.box2d.ChainShape) FixtureDef(com.badlogic.gdx.physics.box2d.FixtureDef)

Example 2 with ChainShape

use of com.badlogic.gdx.physics.box2d.ChainShape in project libgdx by libgdx.

the class Box2DTest method createPhysicsWorld.

private void createPhysicsWorld() {
    // we instantiate a new World with a proper gravity vector
    // and tell it to sleep when possible.
    world = new World(new Vector2(0, -10), true);
    float[] vertices = { -0.07421887f, -0.16276085f, -0.12109375f, -0.22786504f, -0.157552f, -0.7122401f, 0.04296875f, -0.7122401f, 0.110677004f, -0.6419276f, 0.13151026f, -0.49869835f, 0.08984375f, -0.3190109f };
    PolygonShape shape = new PolygonShape();
    shape.set(vertices);
    // next we create a static ground platform. This platform
    // is not moveable and will not react to any influences from
    // outside. It will however influence other bodies. First we
    // create a PolygonShape that holds the form of the platform.
    // it will be 100 meters wide and 2 meters high, centered
    // around the origin
    PolygonShape groundPoly = new PolygonShape();
    groundPoly.setAsBox(50, 1);
    // next we create the body for the ground platform. It's
    // simply a static body.
    BodyDef groundBodyDef = new BodyDef();
    groundBodyDef.type = BodyType.StaticBody;
    groundBody = world.createBody(groundBodyDef);
    // finally we add a fixture to the body using the polygon
    // defined above. Note that we have to dispose PolygonShapes
    // and CircleShapes once they are no longer used. This is the
    // only time you have to care explicitly for memory management.
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = groundPoly;
    fixtureDef.filter.groupIndex = 0;
    groundBody.createFixture(fixtureDef);
    groundPoly.dispose();
    // We also create a simple ChainShape we put above our
    // ground polygon for extra funkyness.
    ChainShape chainShape = new ChainShape();
    chainShape.createLoop(new Vector2[] { new Vector2(-10, 10), new Vector2(-10, 5), new Vector2(10, 5), new Vector2(10, 11) });
    BodyDef chainBodyDef = new BodyDef();
    chainBodyDef.type = BodyType.StaticBody;
    Body chainBody = world.createBody(chainBodyDef);
    chainBody.createFixture(chainShape, 0);
    chainShape.dispose();
    createBoxes();
    // You can savely ignore the rest of this method :)
    world.setContactListener(new ContactListener() {

        @Override
        public void beginContact(Contact contact) {
        // System.out.println("begin contact");
        }

        @Override
        public void endContact(Contact contact) {
        // System.out.println("end contact");
        }

        @Override
        public void preSolve(Contact contact, Manifold oldManifold) {
        // Manifold.ManifoldType type = oldManifold.getType();
        // Vector2 localPoint = oldManifold.getLocalPoint();
        // Vector2 localNormal = oldManifold.getLocalNormal();
        // int pointCount = oldManifold.getPointCount();
        // ManifoldPoint[] points = oldManifold.getPoints();
        // System.out.println("pre solve, " + type +
        // ", point: " + localPoint +
        // ", local normal: " + localNormal +
        // ", #points: " + pointCount +
        // ", [" + points[0] + ", " + points[1] + "]");
        }

        @Override
        public void postSolve(Contact contact, ContactImpulse impulse) {
        // float[] ni = impulse.getNormalImpulses();
        // float[] ti = impulse.getTangentImpulses();
        // System.out.println("post solve, normal impulses: " + ni[0] + ", " + ni[1] + ", tangent impulses: " + ti[0] + ", " + ti[1]);
        }
    });
}
Also used : PolygonShape(com.badlogic.gdx.physics.box2d.PolygonShape) World(com.badlogic.gdx.physics.box2d.World) Contact(com.badlogic.gdx.physics.box2d.Contact) WorldManifold(com.badlogic.gdx.physics.box2d.WorldManifold) Manifold(com.badlogic.gdx.physics.box2d.Manifold) Vector2(com.badlogic.gdx.math.Vector2) ContactImpulse(com.badlogic.gdx.physics.box2d.ContactImpulse) BodyDef(com.badlogic.gdx.physics.box2d.BodyDef) ChainShape(com.badlogic.gdx.physics.box2d.ChainShape) Body(com.badlogic.gdx.physics.box2d.Body) FixtureDef(com.badlogic.gdx.physics.box2d.FixtureDef) ContactListener(com.badlogic.gdx.physics.box2d.ContactListener)

Aggregations

ChainShape (com.badlogic.gdx.physics.box2d.ChainShape)2 FixtureDef (com.badlogic.gdx.physics.box2d.FixtureDef)2 PolygonShape (com.badlogic.gdx.physics.box2d.PolygonShape)2 Vector2 (com.badlogic.gdx.math.Vector2)1 Body (com.badlogic.gdx.physics.box2d.Body)1 BodyDef (com.badlogic.gdx.physics.box2d.BodyDef)1 CircleShape (com.badlogic.gdx.physics.box2d.CircleShape)1 Contact (com.badlogic.gdx.physics.box2d.Contact)1 ContactImpulse (com.badlogic.gdx.physics.box2d.ContactImpulse)1 ContactListener (com.badlogic.gdx.physics.box2d.ContactListener)1 EdgeShape (com.badlogic.gdx.physics.box2d.EdgeShape)1 Fixture (com.badlogic.gdx.physics.box2d.Fixture)1 Manifold (com.badlogic.gdx.physics.box2d.Manifold)1 World (com.badlogic.gdx.physics.box2d.World)1 WorldManifold (com.badlogic.gdx.physics.box2d.WorldManifold)1