List of usage examples for com.badlogic.gdx.physics.box2d WorldManifold getPoints
public Vector2[] getPoints()
From source file:com.blindtigergames.werescrewed.debug.SBox2DDebugRenderer.java
License:Apache License
private void drawContact(Contact contact) { WorldManifold worldManifold = contact.getWorldManifold(); if (worldManifold.getNumberOfContactPoints() == 0) return;//from w ww. j a v a2 s . c om Vector2 point = worldManifold.getPoints()[0]; renderer.point(point.x, point.y, 0); }
From source file:com.me.main.startgame.java
License:Apache License
private boolean isPlayerGrounded(float deltaTime) { Array<Contact> contactList = world.getContactList(); for (int i = 0; i < contactList.size; i++) { Contact contact = contactList.get(i); if (contact.isTouching() && (contact.getFixtureA() == playerSensorFixture || contact.getFixtureB() == playerSensorFixture)) { Vector2 pos = player.getPosition(); WorldManifold manifold = contact.getWorldManifold(); boolean below = true; for (int j = 0; j < manifold.getNumberOfContactPoints(); j++) { below &= (manifold.getPoints()[j].y < pos.y - 0.1f); }//from www .ja va2 s. c o m if (below) { return true; } return false; } } return false; }
From source file:com.me.mygdxgame.Entities.MydebugRenderer.java
License:Apache License
private void drawContact(Contact contact) { WorldManifold worldManifold = contact.getWorldManifold(); if (worldManifold.getNumberOfContactPoints() == 0) return;/*www .java2 s.c o m*/ Vector2 point = worldManifold.getPoints()[0]; renderer.setColor(getColorByBody(contact.getFixtureA().getBody())); renderer.point(point.x, point.y, 0); }
From source file:edu.lehigh.cse.lol.Physics.java
License:Open Source License
/** * Configure physics for the current level * * @param defaultXGravity The default force moving actors to the left (negative) or * right (positive)... Usually zero * @param defaultYGravity The default force pushing actors down (negative) or up * (positive)... Usually zero or -10 *//*w w w . j ava 2 s . c o m*/ public static void configure(float defaultXGravity, float defaultYGravity) { // create a world with gravity Lol.sGame.mCurrentLevel.mWorld = new World(new Vector2(defaultXGravity, defaultYGravity), true); // set up the collision handlers Lol.sGame.mCurrentLevel.mWorld.setContactListener(new ContactListener() { /** * When two bodies start to collide, we can use this to forward to * our onCollide methods */ @Override public void beginContact(final Contact contact) { // Get the bodies, make sure both are actors Object a = contact.getFixtureA().getBody().getUserData(); Object b = contact.getFixtureB().getBody().getUserData(); if (!(a instanceof Actor) || !(b instanceof Actor)) return; // the order is Hero, Enemy, Goodie, Projectile, Obstacle, Destination // // Of those, Hero, Enemy, and Projectile are the only ones with // a non-empty onCollide final Actor c0; final Actor c1; if (a instanceof Hero) { c0 = (Actor) a; c1 = (Actor) b; } else if (b instanceof Hero) { c0 = (Actor) b; c1 = (Actor) a; } else if (a instanceof Enemy) { c0 = (Actor) a; c1 = (Actor) b; } else if (b instanceof Enemy) { c0 = (Actor) b; c1 = (Actor) a; } else if (a instanceof Projectile) { c0 = (Actor) a; c1 = (Actor) b; } else if (b instanceof Projectile) { c0 = (Actor) b; c1 = (Actor) a; } else { return; } // Schedule an event to run as soon as the physics world // finishes its step. // // NB: this is called from render, while world is updating... // you can't modify the world or its actors until the update // finishes, so we have to schedule collision-based updates to // run after the world update. Lol.sGame.mCurrentLevel.mOneTimeEvents.add(new LolAction() { @Override public void go() { c0.onCollide(c1, contact); } }); } /** * We ignore endcontact */ @Override public void endContact(Contact contact) { } /** * Presolve is a hook for disabling certain collisions. We use it * for collision immunity, sticky obstacles, and one-way walls */ @Override public void preSolve(Contact contact, Manifold oldManifold) { // get the bodies, make sure both are actors Object a = contact.getFixtureA().getBody().getUserData(); Object b = contact.getFixtureB().getBody().getUserData(); if (!(a instanceof Actor) || !(b instanceof Actor)) return; Actor gfoA = (Actor) a; Actor gfoB = (Actor) b; // handle sticky obstacles... only do something if at least one // actor is a sticky actor if (gfoA.mIsSticky[0] || gfoA.mIsSticky[1] || gfoA.mIsSticky[2] || gfoA.mIsSticky[3]) { handleSticky(gfoA, gfoB, contact); return; } else if (gfoB.mIsSticky[0] || gfoB.mIsSticky[1] || gfoB.mIsSticky[2] || gfoB.mIsSticky[3]) { handleSticky(gfoB, gfoA, contact); return; } // if the actors have the same passthrough ID, and it's // not zero, then disable the contact if (gfoA.mPassThroughId != 0 && gfoA.mPassThroughId == gfoB.mPassThroughId) { contact.setEnabled(false); return; } // is either one-sided? If not, we're done Actor onesided = null; Actor other; if (gfoA.mIsOneSided > -1) { onesided = gfoA; other = gfoB; } else if (gfoB.mIsOneSided > -1) { onesided = gfoB; other = gfoA; } else { return; } // if we're here, see if we should be disabling a one-sided // obstacle collision WorldManifold worldManiFold = contact.getWorldManifold(); int numPoints = worldManiFold.getNumberOfContactPoints(); for (int i = 0; i < numPoints; i++) { Vector2 vector2 = other.mBody.getLinearVelocityFromWorldPoint(worldManiFold.getPoints()[i]); // disable based on the value of isOneSided and the vector // between the actors if (onesided.mIsOneSided == 0 && vector2.y < 0) contact.setEnabled(false); else if (onesided.mIsOneSided == 2 && vector2.y > 0) contact.setEnabled(false); else if (onesided.mIsOneSided == 1 && vector2.x > 0) contact.setEnabled(false); else if (onesided.mIsOneSided == 3 && vector2.x < 0) contact.setEnabled(false); } } /** * We ignore postsolve */ @Override public void postSolve(Contact contact, ContactImpulse impulse) { } }); }
From source file:org.box2d.r3.gdx.GDXBox2DDebugRenderer.java
License:Apache License
private void drawContact(final Contact contact) { final WorldManifold worldManifold = contact.getWorldManifold(); if (worldManifold.getNumberOfContactPoints() == 0) { return;/* w ww. java2s . com*/ } final Vector2 point = worldManifold.getPoints()[0]; this.renderer.setColor(this.getColorByBody(contact.getFixtureA().getBody())); this.renderer.point(point.x, point.y, 0); }