use of com.badlogic.gdx.physics.box2d.Fixture in project commons-gdx by gemserk.
the class Box2dUtils method setFilter.
/**
* Sets the filter data for all the fixtures of the Body.
*
* @param body
* The Body to set the filters to.
* @param filter
* The Filter data to set to the body fixtures.
*/
public static void setFilter(Body body, Filter filter) {
ArrayList<Fixture> fixtureList = body.getFixtureList();
for (int i = 0; i < fixtureList.size(); i++) {
Fixture fixture = fixtureList.get(i);
fixture.setFilterData(filter);
}
}
use of com.badlogic.gdx.physics.box2d.Fixture in project commons-gdx by gemserk.
the class Box2dUtils method translateFixtures.
/**
* Internally translates all the Body's fixtures the specified translation, without moving the Body's center. For now, it generates garbage so should be used only once.
*
* @param body
* The body to work on.
* @param tx
* The translation in x coordinate.
* @param ty
* The translation in y coordinate.
*/
public static void translateFixtures(ArrayList<Fixture> fixtures, float tx, float ty) {
// TODO: should be in a Box2dUtils
for (int i = 0; i < fixtures.size(); i++) {
Fixture fixture = fixtures.get(i);
Shape shape = fixture.getShape();
if (shape.getType() == Type.Polygon)
ShapeUtils.translatePolygonShape((PolygonShape) shape, tx, ty);
else if (shape.getType() == Type.Circle)
ShapeUtils.translateCircleShape((CircleShape) shape, tx, ty);
}
}
use of com.badlogic.gdx.physics.box2d.Fixture in project commons-gdx by gemserk.
the class Contacts method removeContact.
public void removeContact(com.badlogic.gdx.physics.box2d.Contact contact, boolean AB) {
Fixture myFixture;
Fixture otherFixture;
if (AB) {
myFixture = contact.getFixtureA();
otherFixture = contact.getFixtureB();
} else {
myFixture = contact.getFixtureB();
otherFixture = contact.getFixtureA();
}
removeContact(myFixture, otherFixture);
}
use of com.badlogic.gdx.physics.box2d.Fixture in project commons-gdx by gemserk.
the class PhysicsUtils method releaseContacts.
public static void releaseContacts(Contacts contacts) {
// removes contact from the other entity
for (int i = 0; i < contacts.getContactCount(); i++) {
Contact contact = contacts.getContact(i);
Fixture myFixture = contact.getMyFixture();
Fixture otherFixture = contact.getOtherFixture();
contactsToRemove.add(contact);
Body otherBody = otherFixture.getBody();
if (otherBody == null)
continue;
Entity otherEntity = (Entity) otherBody.getUserData();
if (otherEntity == null)
continue;
// entitiesInContact.add(otherEntity);
// removes the contact from the other entity.
PhysicsComponent otherPhyiscsComponent = Components.getPhysicsComponent(otherEntity);
otherPhyiscsComponent.getContact().removeContact(otherFixture, myFixture);
}
for (int i = 0; i < contactsToRemove.size; i++) {
Contact contact = contactsToRemove.get(i);
contacts.removeContact(contact.getMyFixture(), contact.getOtherFixture());
}
contactsToRemove.clear();
}
use of com.badlogic.gdx.physics.box2d.Fixture in project RubeLoader by tescott.
the class RubeLoaderTest method createPolySpatialsFromRubeFixtures.
/**
* Creates an array of PolySpatials based on fixture information from the scene. Note that
* fixtures create aligned textures.
*
* @param scene
*/
private void createPolySpatialsFromRubeFixtures(RubeScene scene) {
Array<Body> bodies = scene.getBodies();
EarClippingTriangulator ect = new EarClippingTriangulator();
if ((bodies != null) && (bodies.size > 0)) {
polySpatials = new Array<PolySpatial>();
Vector2 bodyPos = new Vector2();
// for each body in the scene...
for (int i = 0; i < bodies.size; i++) {
Body body = bodies.get(i);
bodyPos.set(body.getPosition());
Array<Fixture> fixtures = body.getFixtureList();
if ((fixtures != null) && (fixtures.size > 0)) {
// for each fixture on the body...
for (int j = 0; j < fixtures.size; j++) {
Fixture fixture = fixtures.get(j);
String textureName = (String) scene.getCustom(fixture, "TextureMask", null);
if (textureName != null) {
String textureFileName = "data/" + textureName;
Texture texture = textureMap.get(textureFileName);
TextureRegion textureRegion = null;
if (texture == null) {
texture = new Texture(textureFileName);
texture.setWrap(TextureWrap.Repeat, TextureWrap.Repeat);
textureMap.put(textureFileName, texture);
textureRegion = new TextureRegion(texture);
textureRegionMap.put(texture, textureRegion);
} else {
textureRegion = textureRegionMap.get(texture);
}
// only handle polygons at this point -- no chain, edge, or circle fixtures.
if (fixture.getType() == Shape.Type.Polygon) {
PolygonShape shape = (PolygonShape) fixture.getShape();
int vertexCount = shape.getVertexCount();
float[] vertices = new float[vertexCount * 2];
// static bodies are texture aligned and do not get drawn based off of the related body.
if (body.getType() == BodyType.StaticBody) {
for (int k = 0; k < vertexCount; k++) {
shape.getVertex(k, mTmp);
mTmp.rotate(body.getAngle() * MathUtils.radiansToDegrees);
// convert local coordinates to world coordinates to that textures are
mTmp.add(bodyPos);
// aligned
vertices[k * 2] = mTmp.x * PolySpatial.PIXELS_PER_METER;
vertices[k * 2 + 1] = mTmp.y * PolySpatial.PIXELS_PER_METER;
}
short[] triangleIndices = ect.computeTriangles(vertices).toArray();
PolygonRegion region = new PolygonRegion(textureRegion, vertices, triangleIndices);
PolySpatial spatial = new PolySpatial(region, Color.WHITE);
polySpatials.add(spatial);
} else {
// all other fixtures are aligned based on their associated body.
for (int k = 0; k < vertexCount; k++) {
shape.getVertex(k, mTmp);
vertices[k * 2] = mTmp.x * PolySpatial.PIXELS_PER_METER;
vertices[k * 2 + 1] = mTmp.y * PolySpatial.PIXELS_PER_METER;
}
short[] triangleIndices = ect.computeTriangles(vertices).toArray();
PolygonRegion region = new PolygonRegion(textureRegion, vertices, triangleIndices);
PolySpatial spatial = new PolySpatial(region, body, Color.WHITE);
polySpatials.add(spatial);
}
}
}
}
}
}
}
}
Aggregations