/** Internal method called from JNI in case a contact happens * @param fixtureA * @param fixtureB * @return whether the things collided */ private boolean contactFilter (long fixtureA, long fixtureB) { if (contactFilter != null) return contactFilter.shouldCollide(fixtures.get(fixtureA), fixtures.get(fixtureB)); else { Filter filterA = fixtures.get(fixtureA).getFilterData(); Filter filterB = fixtures.get(fixtureB).getFilterData(); if (filterA.groupIndex == filterB.groupIndex && filterA.groupIndex != 0) { return filterA.groupIndex > 0; } boolean collide = (filterA.maskBits & filterB.categoryBits) != 0 && (filterA.categoryBits & filterB.maskBits) != 0; return collide; } }
boolean globalContactFilter(Fixture fixtureB) { Filter filterB = fixtureB.getFilterData(); if (globalFilterA.groupIndex != 0 && globalFilterA.groupIndex == filterB.groupIndex) return globalFilterA.groupIndex > 0; return (globalFilterA.maskBits & filterB.categoryBits) != 0 && (globalFilterA.categoryBits & filterB.maskBits) != 0; }
boolean globalContactFilter(Fixture fixtureB) { Filter filterB = fixtureB.getFilterData(); if (globalFilterA.groupIndex != 0 && globalFilterA.groupIndex == filterB.groupIndex) return globalFilterA.groupIndex > 0; return (globalFilterA.maskBits & filterB.categoryBits) != 0 && (globalFilterA.categoryBits & filterB.maskBits) != 0; }
boolean contactFilter(Fixture fixtureB) { Filter filterB = fixtureB.getFilterData(); if (filterA.groupIndex != 0 && filterA.groupIndex == filterB.groupIndex) return filterA.groupIndex > 0; return (filterA.maskBits & filterB.categoryBits) != 0 && (filterA.categoryBits & filterB.maskBits) != 0; }
boolean contactFilter(Fixture fixtureB) { Filter filterB = fixtureB.getFilterData(); if (filterA.groupIndex != 0 && filterA.groupIndex == filterB.groupIndex) return filterA.groupIndex > 0; return (filterA.maskBits & filterB.categoryBits) != 0 && (filterA.categoryBits & filterB.maskBits) != 0; }
@Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { // if hit the player, ignore it if (fixture.getFilterData().categoryBits == GameManager.PLAYER_BIT || fixture.getFilterData().categoryBits == GameManager.POWERUP_BIT) { return 0; } if (fraction < 1.0f) { hit = true; } return 0; } };
@Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { // if hit the player or power-up item, ignore it if (fixture.getFilterData().categoryBits == GameManager.PLAYER_BIT || fixture.getFilterData().categoryBits == GameManager.POWERUP_BIT) { return 0; } if (fraction < 1.0f) { hit = true; } return 0; } };
@Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { if (fixture.getFilterData().categoryBits == GameManager.INDESTRUCTIIBLE_BIT | fixture.getFilterData().categoryBits == GameManager.BREAKABLE_BIT | fixture.getFilterData().categoryBits == GameManager.BOMB_BIT | fixture.getFilterData().categoryBits == GameManager.ENEMY_BIT | fixture.getFilterData().categoryBits == GameManager.PLAYER_BIT) { moveable = false; return 0; } return 0; } };
final boolean considerFixture( Fixture fixture ) { Filter filter = map.get( fixture ); if( filter == null ) { filter = fixture.getFilterData(); map.put( fixture, filter ); } return ((requestingLight.maskBits & filter.categoryBits) != 0); }
@Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { if (fixture.getBody() == body) { return 1; } if (fraction < 1.0f && fixture.getFilterData().categoryBits == GameManager.BOMB_BIT) { hitting = true; } return 0; } };
@Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { if (fixture.getBody() == body) { return 1; } if (fraction < 1.0f && fixture.getFilterData().categoryBits == GameManager.BOMB_BIT) { hitting = true; } return 0; } };
public static void setFilterData(Fixture fixture, short maskBits, short categoryBits, short groupIndex){ Filter filter = fixture.getFilterData(); filter.categoryBits = categoryBits; filter.maskBits = maskBits; filter.groupIndex = groupIndex; fixture.setFilterData(filter); }
@Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { if (fixture.getFilterData().categoryBits == GameManager.INDESTRUCTIIBLE_BIT) { canExplodeThrough = false; return 0; } if (fixture.getFilterData().categoryBits == GameManager.BREAKABLE_BIT) { canExplodeThrough = false; Entity e = (Entity) fixture.getBody().getUserData(); Breakable breakable = e.getComponent(Breakable.class); breakable.state = Breakable.State.EXPLODING; return 0; } return 0; } };
@Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { if (fixture.getFilterData().categoryBits == GameManager.BOMB_BIT) { Entity bombEntity = (Entity) fixture.getBody().getUserData(); kickingBomb = bombEntity.getComponent(Bomb.class); return 0; } return 0; } };
/** Internal method called from JNI in case a contact happens * @param fixtureA * @param fixtureB * @return whether the things collided */ private boolean contactFilter (long fixtureA, long fixtureB) { if (contactFilter != null) return contactFilter.shouldCollide(fixtures.get(fixtureA), fixtures.get(fixtureB)); else { Filter filterA = fixtures.get(fixtureA).getFilterData(); Filter filterB = fixtures.get(fixtureB).getFilterData(); if (filterA.groupIndex == filterB.groupIndex && filterA.groupIndex != 0) { return filterA.groupIndex > 0; } boolean collide = (filterA.maskBits & filterB.categoryBits) != 0 && (filterA.categoryBits & filterB.maskBits) != 0; return collide; } }
int cDef = fixA.getFilterData().categoryBits | fixB.getFilterData().categoryBits; if(fixA.getFilterData().categoryBits == MarioBros.MARIO_HEAD_BIT) ((InteractiveTileObject) fixB.getUserData()).onHeadHit((Mario) fixA.getUserData()); else break; case MarioBros.ENEMY_HEAD_BIT | MarioBros.MARIO_BIT: if(fixA.getFilterData().categoryBits == MarioBros.ENEMY_HEAD_BIT) ((Enemy)fixA.getUserData()).hitOnHead((Mario) fixB.getUserData()); else break; case MarioBros.ENEMY_BIT | MarioBros.OBJECT_BIT: if(fixA.getFilterData().categoryBits == MarioBros.ENEMY_BIT) ((Enemy)fixA.getUserData()).reverseVelocity(true, false); else break; case MarioBros.MARIO_BIT | MarioBros.ENEMY_BIT: if(fixA.getFilterData().categoryBits == MarioBros.MARIO_BIT) ((Mario) fixA.getUserData()).hit((Enemy)fixB.getUserData()); else break; case MarioBros.ITEM_BIT | MarioBros.OBJECT_BIT: if(fixA.getFilterData().categoryBits == MarioBros.ITEM_BIT) ((Item)fixA.getUserData()).reverseVelocity(true, false); else
|| c.getFixtureB() == contact.getFixtureA()) { if(c.getFixtureB().getFilterData().maskBits == MASK_PLAYER && c.getFixtureB() != fixtureB) { e.setAngry(true); break; else if(c.getFixtureA().getFilterData().maskBits == MASK_PLAYER && c.getFixtureA() != fixtureB) { e.setAngry(true); || c.getFixtureB() == contact.getFixtureB()) { if(c.getFixtureB().getFilterData().maskBits == MASK_PLAYER && c.getFixtureB() != fixtureA) { e.setAngry(true); break; else if(c.getFixtureA().getFilterData().maskBits == MASK_PLAYER && c.getFixtureA() != fixtureA) { e.setAngry(true);
case DYING: state.setCurrentState("dying"); Filter filter = body.getFixtureList().get(0).getFilterData(); filter.maskBits = GameManager.NOTHING_BIT; body.getFixtureList().get(0).setFilterData(filter);
case DYING: state.setCurrentState("dying"); Filter filter = body.getFixtureList().get(0).getFilterData(); filter.maskBits = GameManager.NOTHING_BIT; body.getFixtureList().get(0).setFilterData(filter);
case DYING: state.setCurrentState("dying"); Filter filter = body.getFixtureList().get(0).getFilterData(); filter.maskBits = GameManager.NOTHING_BIT; body.getFixtureList().get(0).setFilterData(filter);