Java 类com.badlogic.gdx.physics.box2d.Fixture 实例源码
项目:homescreenarcade
文件:Field.java
/**
* Called after Box2D world step method, to notify FieldElements that the ball collided with.
*/
void processBallContacts() {
for(int i=0; i<contactedBalls.size(); i++) {
Ball ball = contactedBalls.get(i);
Fixture f = contactedFixtures.get(i);
FieldElement element = bodyToFieldElement.get(f.getBody());
if (element!=null) {
element.handleCollision(ball, f.getBody(), this);
if (delegate!=null) {
delegate.processCollision(this, element, f.getBody(), ball);
}
if (element.getScore()!=0) {
this.gameState.addScore(element.getScore());
audioPlayer.playScore();
}
}
}
}
项目:homescreenarcade
文件:Field.java
@Override public void endContact(Contact contact) {
Fixture fixture = null;
Ball ball = ballWithBody(contact.getFixtureA().getBody());
if (ball != null) {
fixture = contact.getFixtureB();
}
else {
ball = ballWithBody(contact.getFixtureB().getBody());
if (ball != null) {
fixture = contact.getFixtureA();
}
}
if (ball != null) {
contactedBalls.add(ball);
contactedFixtures.add(fixture);
}
}
项目:feup-lpoo-armadillo
文件:WorldContactListener.java
/**
* {@inheritDoc}
*/
@Override
public void beginContact(Contact contact) {
Fixture fixA = contact.getFixtureA();
Fixture fixB = contact.getFixtureB();
ContactHandler handler;
handler = beginContactFunctions.get(fixA.getFilterData().categoryBits);
if (handler != null)
handler.handle(fixA, fixB);
handler = beginContactFunctions.get(fixB.getFilterData().categoryBits);
if (handler != null)
handler.handle(fixB, fixA);
}
项目:feup-lpoo-armadillo
文件:WorldContactListener.java
/**
* {@inheritDoc}
*/
@Override
public void endContact(Contact contact) {
Fixture fixA = contact.getFixtureA();
Fixture fixB = contact.getFixtureB();
ContactHandler handler;
handler = endContactFunctions.get(fixA.getFilterData().categoryBits);
if (handler != null)
handler.handle(fixA, fixB);
handler = endContactFunctions.get(fixB.getFilterData().categoryBits);
if (handler != null)
handler.handle(fixB, fixA);
}
项目:feup-lpoo-armadillo
文件:BuoyancyController.java
/**
* Function called in the game loop, responsible for updating the fluid.
*/
public void step() {
for (Fixture fixture : fixtures) {
if (fixture.getBody().isAwake()) {
/* Create clipPolygon */
List<Vector2> clipPolygon = getFixtureVertices(fixture);
/* Create subjectPolygon */
List<Vector2> subjectPolygon;
if (isFluidFixed) {
subjectPolygon = fluidVertices;
} else
subjectPolygon = getFixtureVertices(fluidSensor);
/* Get intersection polygon */
List<Vector2> clippedPolygon = PolygonIntersector.clipPolygons(
subjectPolygon, clipPolygon);
if (!clippedPolygon.isEmpty()) {
applyForces(fixture, clippedPolygon.toArray(new Vector2[0]));
}
}
}
}
项目:water2d-libgdx
文件:IntersectionUtils.java
/**
* Because the algorithm is based on vertices, and the circles do not have vertices, we create a square around it.
* @param fixture Circle fixture
* @return A square instead of the circle
*/
private static PolygonShape circleToSquare(Fixture fixture) {
Vector2 position = fixture.getBody().getLocalCenter();
float x = position.x;
float y = position .y;
float radius = fixture.getShape().getRadius();
PolygonShape octagon = new PolygonShape();
Vector2[] vertices = new Vector2[4];
vertices[0] = new Vector2(x-radius, y+radius);
vertices[1]= new Vector2(x+radius, y+radius);
vertices[2]= new Vector2(x-radius, y-radius);
vertices[3]= new Vector2(x+radius, y-radius);
octagon.set((Vector2[]) vertices);
return octagon;
}
项目:water2d-libgdx
文件:Water.java
/**
* Constructor that allows to specify if there is an effect of waves and splash particles.
* @param waves Specifies whether the object will have waves
* @param splashParticles Specifies whether the object will have splash particles
*/
public Water(boolean waves, boolean splashParticles) {
this.waves = waves;
this.splashParticles = splashParticles;
this.fixturePairs = new HashSet<Pair<Fixture, Fixture>>();
this.setDebugMode(false);
if (waves) {
textureWater = new TextureRegion(new Texture(Gdx.files.internal("water.png")));
polyBatch = new PolygonSpriteBatch();
}
if (splashParticles) {
textureDrop = new Texture(Gdx.files.internal("drop.png"));
spriteBatch = new SpriteBatch();
particles = new ArrayList<Particle>();
}
shapeBatch = new ShapeRenderer();
shapeBatch.setColor(0, 0.5f, 1, 1);
}
项目:summer17-android
文件:WorldContactListener.java
@Override
public void endContact(Contact contact) {
Fixture fixA = contact.getFixtureA();
Fixture fixB = contact.getFixtureB();
if (fixA.getUserData() == "bottom" || fixB.getUserData() == "bottom") {
Fixture bottom = fixA.getUserData() == "bottom" ? fixA : fixB;
Fixture object = bottom == fixA ? fixB : fixA;
//resets object touched
if (object.getUserData() != null &&
InteractiveTileObject.class.isAssignableFrom(object.getUserData().getClass())) {
isObjectTouched = NoObjectionGame.DEFAULT;
}
}
}
项目:libGdx-xiyou
文件:Box2DContactListener.java
@Override
public void endContact(Contact contact) {
Fixture fixtureA = contact.getFixtureA();
Fixture fixtureB = contact.getFixtureB();
// 夹具为空时,碰撞直接返回不执行。
if (fixtureA == null || fixtureB == null) {
return;
}
//孙悟空跳跃结束
if (fixtureA.getUserData() != null && fixtureA.getUserData().equals("foot")) {
// 计数器减1
platformNum--;
}
if (fixtureB.getUserData() != null && fixtureB.getUserData().equals("foot")) {
// 计数器减1
platformNum--;
}
}
项目:fluffybalance
文件:Balanceball.java
private void initBall() {
float radius = 26;
mBall = new Circle(0.f, 0.f, radius);
mBallTextureRegion = new TextureRegion(new Texture(Gdx.files.internal("ball.png")));
// create physics body
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.position.set(mBall.x, mBall.y);
CircleShape ballShape = new CircleShape();
ballShape.setRadius(mBall.radius - 2.f);
mBallBody = mWorld.createBody(bodyDef);
mBallBody.setUserData(new BodyUserDate(BODY_USER_DATA_TYPE_BALL));
Fixture fixture = mBallBody.createFixture(ballShape, 0.5f);
fixture.setFriction(BALL_FRICTION_BASE);
fixture.setRestitution(0.4f);
ballShape.dispose();
}
项目:JavityEngine
文件:JPhysic.java
public static List<RaycastHit> raycastPoint(final Vector2 pointToTest) {
final List<RaycastHit> hits = new ArrayList<RaycastHit>();
Vector2 end = pointToTest.add(new Vector2(1, 1));
//TODO move to static single object
physic.physicWorld.QueryAABB(new QueryCallback() {
@Override
public boolean reportFixture(Fixture fixture) {
if (fixture.testPoint(pointToTest)) {
hits.add(new RaycastHit(fixture, pointToTest));
}
return true;
}
}, pointToTest.x < end.x ? pointToTest.x : end.x, pointToTest.y < end.y ? pointToTest.y : end.y,
pointToTest.x > end.x ? pointToTest.x : end.x, pointToTest.y > end.y ? pointToTest.y : end.y);
return hits;
}
项目:cgc-game
文件:CGCWorld.java
public static void emptyDestroyList()
{
if (!world.isLocked())
{
while(toDestroyList.size > 0)
{
if (toDestroyList.get(0).getBody() != null)
{
Body b = toDestroyList.get(0).getBody();
Array<Fixture> fixes = new Array<Fixture>();
world.getFixtures(fixes);
if (fixes.contains(b.getFixtureList().first(), false)) {
world.destroyBody(b);
}
}
toDestroyList.get(0).finalCleanup();
toDestroyList.get(0).removeFromWorldLayers(lh);
toDestroyList.removeValue(toDestroyList.get(0), true);
}
}
}
项目:cgc-game
文件:RookieCop.java
public void die(DeathType death)
{
if(alive)
{
if (grabbed != null)
{
stopGrabbing(false);
}
gameWorld.startRespawnClock(this);
Fixture f = body.getFixtureList().get(0);
Filter fi = f.getFilterData();
fi.categoryBits = BodyFactory.CAT_DECEASED;
fi.maskBits = BodyFactory.MASK_DECEASED;
f.setFilterData(fi);
body.getFixtureList().set(0, f);
super.die(death);
}
}
项目:cgc-game
文件:Sheriff.java
public void swapWorldLayers(LayerHandler lh)
{
removeFromWorldLayers(lh);
lh.addEntityToLayer(this, LayerHandler.ground);
swapped = true;
Fixture f = body.getFixtureList().get(0);
Filter fi = f.getFilterData();
fi.categoryBits = BodyFactory.CAT_IMPASSABLE;
fi.maskBits = BodyFactory.MASK_SHERIFF_GROUND;
f.setFilterData(fi);
body.getFixtureList().set(0, f);
canFire = false;
TimerManager.addTimer(swapTimer);
}
项目:cgc-game
文件:ContactManager.java
public void testPlayerMud(GameEntity geA, GameEntity geB, Fixture fA, Fixture fB, boolean start)
{
if (geA instanceof Player || geB instanceof Player)
{
if (geA instanceof Player && fA.getDensity() == BodyFactory.HIT_BOX_DEN ||
geB instanceof Player && fB.getDensity() == BodyFactory.HIT_BOX_DEN)
{
if (geB.getType() == EntityType.MUD)
{
handlePlayerTerrain(geA, geB, start);
}
else if (geA.getType() == EntityType.MUD)
{
handlePlayerTerrain(geB, geA, start);
}
}
}
}
项目:cgc-game
文件:ContactManager.java
public void testPlayerWater(GameEntity geA, GameEntity geB, Fixture fA, Fixture fB, boolean start)
{
if (geA instanceof Player || geB instanceof Player)
{
if (geA instanceof Player && fA.getDensity() == BodyFactory.HIT_BOX_DEN ||
geB instanceof Player && fB.getDensity() == BodyFactory.HIT_BOX_DEN)
{
if (geB.getType() == EntityType.WATER)
{
handlePlayerTerrain(geA, geB, start);
}
else if (geA.getType() == EntityType.WATER)
{
handlePlayerTerrain(geB, geA, start);
}
}
}
}
项目:cgc-game
文件:ContactManager.java
public void testPlayerTower(GameEntity geA, GameEntity geB, Fixture fA, Fixture fB, boolean start)
{
if (geA instanceof Player || geB instanceof Player)
{
if (geA instanceof Player && fA.getDensity() == BodyFactory.HIT_BOX_DEN ||
geB instanceof Player && fB.getDensity() == BodyFactory.HIT_BOX_DEN)
{
if (geB.getType() == EntityType.TOWER)
{
handlePlayerTower(geA, geB, start);
}
else if (geA.getType() == EntityType.TOWER)
{
handlePlayerTower(geB, geA, start);
}
}
}
}
项目:cgc-game
文件:ContactManager.java
public void testPlayerBridge(GameEntity geA, GameEntity geB, Fixture fA, Fixture fB, boolean start)
{
if (geA instanceof Player || geB instanceof Player)
{
if (geA instanceof Player && fA.getDensity() == BodyFactory.BRIDGE_BOX_DEN ||
geB instanceof Player && fB.getDensity() == BodyFactory.BRIDGE_BOX_DEN)
{
if (geB.getType() == EntityType.BRIDGE)
{
handlePlayerBridge(geA, geB, start);
}
else if (geA.getType() == EntityType.BRIDGE)
{
handlePlayerBridge(geB, geA, start);
}
}
}
}
项目:rbcgj-2016
文件:Light.java
@Override
final public float reportRayFixture(Fixture fixture, Vector2 point,
Vector2 normal, float fraction) {
if ((globalFilterA != null) && !globalContactFilter(fixture))
return -1;
if ((filterA != null) && !contactFilter(fixture))
return -1;
if (ignoreBody && fixture.getBody() == getBody())
return -1;
// if (fixture.isSensor())
// return -1;
mx[m_index] = point.x;
my[m_index] = point.y;
f[m_index] = fraction;
return fraction;
}
项目:joe
文件:Player.java
private void handleFootContact(Contact contact, boolean onBeginContact) {
Fixture footSensor = getFootSensor();
if (contact.getFixtureA() == footSensor || contact.getFixtureB() == footSensor) {
Fixture otherFixture =
(footSensor == contact.getFixtureA()) ? contact.getFixtureB() : contact.getFixtureA();
if (!otherFixture.isSensor()) {
if (onBeginContact) {
if (numFootContacts == 0) {
land();
}
numFootContacts++;
} else {
numFootContacts--;
}
numFootContacts = Math.max(0, numFootContacts);
}
}
}
项目:advio
文件:ContactListener.java
public void playerHitsEnemy(Fixture player, Fixture enemy) {
float playerRadius = player.getShape().getRadius();
float enemyRadius = enemy.getShape().getRadius();
if (playerRadius > enemyRadius) {
enemy.getShape().setRadius(0);
if (l.originalLogic)
player.getShape().setRadius(player.getShape().getRadius() + enemyRadius / 2);
else
player.getShape().setRadius(player.getShape().getRadius() - enemyRadius / 2);
enemy.getFilterData().groupIndex = Advio.GROUP_COLLIDE_WITH_PLAYER;
((UserData) enemy.getUserData()).add("killer", player);
} else if (enemyRadius > playerRadius) {
player.getShape().setRadius(0);
if (l.originalLogic)
enemy.getShape().setRadius(enemy.getShape().getRadius() + enemyRadius / 2);
else
enemy.getShape().setRadius(enemy.getShape().getRadius() - enemyRadius / 2);
player.getBody().setLinearVelocity(0, 0);
l.lose();
}
}
项目:libgdxjam
文件:VisionSystem.java
@Override
public float reportRayFixture(Fixture fixture,
Vector2 point,
Vector2 normal,
float fraction) {
Object data = fixture.getBody().getUserData();
if (data == observer) {
return -1;
}
minFraction = fraction;
if (data == observable) {
observableFraction = fraction;
return fraction;
}
return 0;
}
项目:libgdxjam
文件:PlayerSystem.java
private void setStance(Entity entity, String stance) {
logger.info("set stance: " + stance);
PhysicsComponent physics = Mappers.physics.get(entity);
PlayerComponent player = Mappers.player.get(entity);
AssetManager assetManager = Env.getGame().getAssetManager();
World world = physicsSystem.getWorld();
if (world.getBodyCount() > 0 &&
physics.body != null) {
world.destroyBody(physics.body);
}
PhysicsData physicsData = assetManager.get(stance, PhysicsData.class);
physics.body = physicsData.createBody(world, entity);
Array<Fixture> fixtures = physics.body.getFixtureList();
player.fixture = fixtures.get(physicsData.getFixtureIdx("main"));
player.feetSensor = fixtures.get(physicsData.getFixtureIdx("feet"));
NodeComponent node = Mappers.node.get(entity);
NodeUtils.computeWorld(entity);
physics.body.setTransform(node.position, node.angle);
}
项目:Entitas-Java
文件:RadarSensorSystem.java
@Override
public void processCollision(Fixture colliderA, Fixture colliderB, boolean collisionSignal) {
if (colliderA.isSensor() && !colliderB.isSensor()) {
Integer indexEntityA = (Integer) colliderA.getBody().getUserData();
Integer indexEntityB = (Integer) colliderB.getBody().getUserData();
String tagSensorA = (String) colliderA.getUserData();
if (indexEntityA != null && indexEntityB != null && tagSensorA != null && tagSensorA.equals("RadarSensor")) {
GameEntity entityB = Indexed.getInteractiveEntity(indexEntityB);
if (entityB != null) {
for (SensorEntity entity : sensorGroup.getEntities()) {
RadarSensor radar = entity.getRadarSensor();
if (entityB.getTags().values.contains(radar.targetTag)) {
if (collisionSignal) {
Indexed.addEntityInSensor(entity, entityB);
} else {
Indexed.removeEntityInSensor(entity, entityB);
}
radar.collisionSignal = collisionSignal;
}
}
}
}
}
}
项目:Entitas-Java
文件:RaySensorSystem.java
float reportRayFixture (RaySensor sensor, Fixture fixture){
Integer indexEntity = (Integer) fixture.getBody().getUserData();
sensor.collisionSignal = false;
GameEntity entity = Indexed.getInteractiveEntity(indexEntity);
if (sensor.targetTag != null && entity.getTags().values.contains(sensor.targetTag)) {
sensor.rayContactList.add(indexEntity);
sensor.collisionSignal = true;
} else if (sensor.targetTag == null ) {
sensor.rayContactList.add(indexEntity);
sensor.collisionSignal = true;
}
if (sensor.xRayMode) return 1;
else return 0;
}
项目:Dodgy-Dot
文件:GameScreen.java
@Override
public void beginContact(Contact contact) {
// TODO Auto-generated method stub
Fixture fixtureA = contact.getFixtureA();
Fixture fixtureB = contact.getFixtureB();
//logger.info("contact");
if (state == GAME_RUNNING) {
if (fixtureA.getFilterData().categoryBits == CATEGORY_PLAYER &&
fixtureB.getFilterData().categoryBits == CATEGORY_ENEMY) {
//fixtureA.getFilterData().maskBits = 0;
state = GAME_OVER_SETUP;
}
else if (fixtureA.getFilterData().categoryBits == CATEGORY_ENEMY &&
fixtureB.getFilterData().categoryBits == CATEGORY_PLAYER) {
//fixtureB.getFilterData().maskBits = 0;
state = GAME_OVER_SETUP;
}
}
if ((fixtureA.isSensor() == true && fixtureB.getFilterData().categoryBits == CATEGORY_PLAYER)
|| (fixtureB.isSensor() == true && fixtureA.getFilterData().categoryBits == CATEGORY_PLAYER)) {
state = BALL_DESTROYED;
}
}
项目:jumpdontdie
文件:Box2DScreen.java
@Override
public void endContact(Contact contact) {
// End the collision.
Fixture fixtureA = contact.getFixtureA(), fixtureB = contact.getFixtureB();
// This is another way for guessing which fixture are you working with. If you have
// the reference to that fixture you can just check if both variable reference the
// same instance.
if (fixtureA == minijoeFixture && fixtureB == floorFixture) {
isJumping = true;
}
if (fixtureA == floorFixture && fixtureB == minijoeFixture) {
isJumping = true;
}
}
项目:KillTheNerd
文件:MyContactListener.java
/**
* @param fixtureA
* @param bodyB
*/
public static void checkFootCollision(final Fixture fixtureA, final Body bodyB) {
if ((fixtureA.getUserData() == null) || (fixtureA.getBody().getUserData() == null)) {
return;
}
if (bodyB.getUserData() == null) {
return;
}
final boolean bIsGround = bodyB.getUserData().equals("ground");
final Object tempData = fixtureA.getBody().getUserData();
if (fixtureA.getUserData().equals("foot") && bIsGround) {
((Player) tempData).setFooterCollidingCount(((Player) tempData).getFooterCollidingCount() + 1);
// System.out.println("MyContactListener - playerIsOnGround = true");
} else
if (fixtureA.getUserData().equals("outerFootRight")) {
((Player) tempData).incrOuterFootRightCount();
} else
if (fixtureA.getUserData().equals("outerFootLeft")) {
((Player) tempData).incrOuterFootLeftCount();
}
}
项目:KillTheNerd
文件:MyContactListener.java
public static void checkWallCollision(final Fixture fixtureA, final Body bodyB, final boolean set) {
if ((fixtureA.getUserData() == null) || (fixtureA.getBody().getUserData() == null)) {
return;
}
if (bodyB.getUserData() == null) {
return;
}
final Object tempData = fixtureA.getBody().getUserData();
final boolean bIsGround = bodyB.getUserData().equals("ground");
if (fixtureA.getUserData().equals("wall") && bIsGround) {
if (set) {
((Player) tempData).incrWall();
} else {
((Player) tempData).decrWall();
}
}
}
项目:KillTheNerd
文件:MyContactListener.java
public static void checkHeadCollision(final Fixture fixtureA, final Body bodyB, final boolean set) {
if ((fixtureA.getUserData() == null) || (fixtureA.getBody().getUserData() == null)) {
return;
}
if (bodyB.getUserData() == null) {
return;
}
final Object tempData = fixtureA.getBody().getUserData();
final boolean bIsGround = bodyB.getUserData().equals("ground");
if (fixtureA.getUserData().equals("head") && bIsGround) {
if (set) {
((Player) tempData).incrHead();
} else {
((Player) tempData).decrHead();
}
}
}
项目:ZombieCopter
文件:DamageSystem.java
@Override
protected void processEntity(Entity entity, float deltaTime) {
PhysicsComponent physics = App.engine.mappers.physics.get(entity);
BulletComponent bullet = App.engine.mappers.bullet.get(entity);
ChildComponent child = App.engine.mappers.child.get(entity);
//Iterate over all touching fixtures, checking to see if they have
// health, and deal damage as necessary
Array<Fixture> fixturesTouching = App.engine.systems.physics.getFixturesTouching(physics);
for (Fixture f : fixturesTouching){
//Should have no effect on sensors
if (f.isSensor()) continue;
PhysicsComponent p = (PhysicsComponent) f.getBody().getUserData();
if (p == null) continue;
Entity dealer = (child == null) ? entity : child.parentEntity;
dealDamage(dealer,p.ownerEntity,bullet.damage,physics.getRotation());
}
//disable bullet after colliding with anything
if (physics.getCollisionNormal() > 0) {
physics.setFilter(CollisionBits.Effects,CollisionBits.Mask_Effects);
entity.remove(BulletComponent.class);
//logger.debug("Entity #" + entity.getId() + ": damage disabled");
}
}
项目:elin-game
文件:MartenScript.java
private void checkBottomCollision() {
float raySize = -(verticalSpeed+Gdx.graphics.getDeltaTime())*Gdx.graphics.getDeltaTime();
if(raySize < 5f) raySize = 5f;
if(verticalSpeed > 0) return;
final Vector2 rayFrom = new Vector2((item.getX() + item.getWidth() / 2) * PhysicsBodyLoader.SCALE,
(item.getY() + item.getHeight()/2) * PhysicsBodyLoader.SCALE);
final Vector2 rayTo = new Vector2((item.getX() + item.getWidth() / 2) * PhysicsBodyLoader.SCALE,
(item.getY() - raySize) * PhysicsBodyLoader.SCALE);
gameStage.getWorld().rayCast(new RayCastCallback(){
public float reportRayFixture(final Fixture fixture, final Vector2 point, final Vector2 normal, final float fraction){
verticalSpeed = 0;
item.setY(point.y/PhysicsBodyLoader.SCALE+0.1f);
return 0;
}
}, rayFrom, rayTo);
}
项目:tilt-game-android
文件:RenderOfPolyFixture.java
public RenderOfPolyFixture(Fixture fixture, VertexBufferObjectManager pVBO) {
super(fixture);
PolygonShape fixtureShape = (PolygonShape) fixture.getShape();
int vSize = fixtureShape.getVertexCount();
float[] xPoints = new float[vSize];
float[] yPoints = new float[vSize];
Vector2 vertex = Vector2Pool.obtain();
for (int i = 0; i < fixtureShape.getVertexCount(); i++) {
fixtureShape.getVertex(i, vertex);
xPoints[i] = vertex.x * PhysicsConnector.PIXEL_TO_METER_RATIO_DEFAULT;
yPoints[i] = vertex.y * PhysicsConnector.PIXEL_TO_METER_RATIO_DEFAULT;
}
Vector2Pool.recycle(vertex);
mEntity = new PolyLine(0, 0, xPoints, yPoints, pVBO);
}
项目:tilt-game-android
文件:DebugRenderer.java
/**
* Translates b2d Fixture to appropriate color, depending on body state/type
* Modify to suit your needs
* @param fixture
* @return
*/
private static Color fixtureToColor(Fixture fixture) {
if (fixture.isSensor()) {
return Color.PINK;
} else {
Body body = fixture.getBody();
if (!body.isActive()) {
return Color.BLACK;
} else {
if (!body.isAwake()) {
return Color.RED;
} else {
switch (body.getType()) {
case StaticBody:
return Color.CYAN;
case KinematicBody:
return Color.WHITE;
case DynamicBody:
default:
return Color.GREEN;
}
}
}
}
}
项目:tilt-game-android
文件:DebugRenderer.java
public RenderOfBody(Body pBody, VertexBufferObjectManager pVBO) {
ArrayList<Fixture> fixtures = pBody.getFixtureList();
/**
* Spawn all IRenderOfFixture for this body that are out there,
* and bind them to this RenderOfBody
*/
for (Fixture fixture : fixtures) {
IRenderOfFixture renderOfFixture;
if (fixture.getShape().getType() == Type.Circle) {
renderOfFixture = new RenderOfCircleFixture(fixture, pVBO);
} else {
renderOfFixture = new RenderOfPolyFixture(fixture, pVBO);
}
updateColor();
mRenderFixtures.add(renderOfFixture);
this.attachChild(renderOfFixture.getEntity());
}
}
项目:Bomberman_libGdx
文件:BombSystem.java
private boolean checkMovable(Body body, Vector2 from, Vector2 to) {
World b2dWorld = body.getWorld();
moveable = true;
RayCastCallback rayCastCallback = new RayCastCallback() {
@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;
}
};
b2dWorld.rayCast(rayCastCallback, from, to);
return moveable;
}
项目:Bomberman_libGdx
文件:ActorBuilder.java
private boolean checkCanExplodeThrough(Vector2 fromV, Vector2 toV) {
canExplodeThrough = true;
RayCastCallback rayCastCallback = new RayCastCallback() {
@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;
}
};
b2dWorld.rayCast(rayCastCallback, fromV, toV);
return canExplodeThrough;
}
项目:feup-lpoo-armadillo
文件:WorldContactListener.java
/**
* Adds hittable contact handlers to all the hittable bodies.
*/
private void addHittableContactHandlers() {
beginContactFunctions.put(HITTABLE_BIT, new ContactHandler() {
@Override
public void handle(Fixture fixA, Fixture fixB) {
if (!(fixB.getBody().getUserData() instanceof EntityModel))
return;
((Hittable) fixA.getBody().getUserData()).onHit((BallModel) fixB.getBody().getUserData());
}
});
}
项目:feup-lpoo-armadillo
文件:WorldContactListener.java
/**
* Setting the Ball's state upon begin contact with specific fixtures.
*
* @param ball The ball's fixture.
* @param other The fixture the ball begins contact with
*/
private void ballBeginContact(Fixture ball, Fixture other) {
switch (other.getFilterData().categoryBits) {
case GROUND_BIT:
((BallModel) ball.getBody().getUserData()).setState(BallModel.State.LANDED);
break;
}
}
项目:feup-lpoo-armadillo
文件:WorldContactListener.java
/**
* Setting the Ball's state upon ending contact with specific fixtures.
*
* @param ball The ball's fixture.
* @param other The fixture the ball ends contact with
*/
private void ballEndContact(Fixture ball, Fixture other) {
switch (other.getFilterData().categoryBits) {
case GROUND_BIT:
((BallModel) ball.getBody().getUserData()).setState(BallModel.State.FLYING);
break;
}
}