Refactor entity.PhysicsBody to physics.PhysicsBody

Create CollisionListener interface and Box2dContactListener
Register the Box2dContactListener with the box2d world
This commit is contained in:
2018-11-14 22:26:02 +04:00
parent 0994289c7e
commit 92201411b9
8 changed files with 71 additions and 4 deletions

View File

@ -0,0 +1,53 @@
package com.me.brickbuster.physics;
import com.badlogic.gdx.physics.box2d.Contact;
import com.badlogic.gdx.physics.box2d.ContactImpulse;
import com.badlogic.gdx.physics.box2d.ContactListener;
import com.badlogic.gdx.physics.box2d.Manifold;
import com.me.brickbuster.entity.Entity;
public class Box2dContactListener implements ContactListener {
@Override
public void beginContact(Contact contact) {
Object userDataA = contact.getFixtureA().getBody().getUserData();
Object userDataB = contact.getFixtureB().getBody().getUserData();
if (userDataA == null || userDataB == null ||
!(userDataA instanceof Entity) || !(userDataB instanceof Entity)) {
return;
}
if (userDataA instanceof CollisionListener) {
((CollisionListener) userDataA).beginContact((Entity) userDataB);
}
if (userDataB instanceof CollisionListener) {
((CollisionListener) userDataB).beginContact((Entity) userDataA);
}
}
@Override
public void endContact(Contact contact) {
Object userDataA = contact.getFixtureA().getBody().getUserData();
Object userDataB = contact.getFixtureB().getBody().getUserData();
if (userDataA == null || userDataB == null ||
!(userDataA instanceof Entity) || !(userDataB instanceof Entity)) {
return;
}
if (userDataA instanceof CollisionListener) {
((CollisionListener) userDataA).endContact((Entity) userDataB);
}
if (userDataB instanceof CollisionListener) {
((CollisionListener) userDataB).endContact((Entity) userDataA);
}
}
@Override
public void preSolve(Contact contact, Manifold oldManifold) {}
@Override
public void postSolve(Contact contact, ContactImpulse impulse) {}
}

View File

@ -0,0 +1,11 @@
package com.me.brickbuster.physics;
import com.me.brickbuster.entity.Entity;
public interface CollisionListener {
void beginContact(Entity contacted);
void endContact(Entity contacted);
}

View File

@ -0,0 +1,9 @@
package com.me.brickbuster.physics;
import com.badlogic.gdx.physics.box2d.Body;
public interface PhysicsBody {
Body getBody();
}