Refactor entity.PhysicsBody to physics.PhysicsBody
Create CollisionListener interface and Box2dContactListener Register the Box2dContactListener with the box2d world
This commit is contained in:
parent
0994289c7e
commit
92201411b9
@ -10,6 +10,7 @@ import com.badlogic.gdx.physics.box2d.Body;
|
||||
import com.badlogic.gdx.physics.box2d.BodyDef;
|
||||
import com.badlogic.gdx.physics.box2d.CircleShape;
|
||||
import com.badlogic.gdx.physics.box2d.FixtureDef;
|
||||
import com.me.brickbuster.physics.PhysicsBody;
|
||||
import com.me.brickbuster.state.PlayState;
|
||||
|
||||
public class Ball extends Entity implements PhysicsBody {
|
||||
|
@ -9,6 +9,7 @@ import com.badlogic.gdx.physics.box2d.BodyDef;
|
||||
import com.badlogic.gdx.physics.box2d.FixtureDef;
|
||||
import com.badlogic.gdx.physics.box2d.PolygonShape;
|
||||
import com.me.brickbuster.entity.powerup.PowerUpType;
|
||||
import com.me.brickbuster.physics.PhysicsBody;
|
||||
import com.me.brickbuster.state.PlayState;
|
||||
|
||||
public class Brick extends Entity implements PhysicsBody {
|
||||
|
@ -10,6 +10,7 @@ import com.badlogic.gdx.physics.box2d.Body;
|
||||
import com.badlogic.gdx.physics.box2d.BodyDef;
|
||||
import com.badlogic.gdx.physics.box2d.EdgeShape;
|
||||
import com.badlogic.gdx.physics.box2d.FixtureDef;
|
||||
import com.me.brickbuster.physics.PhysicsBody;
|
||||
import com.me.brickbuster.state.PlayState;
|
||||
import net.dermetfan.utils.Pair;
|
||||
|
||||
|
@ -10,7 +10,7 @@ import com.badlogic.gdx.physics.box2d.CircleShape;
|
||||
import com.badlogic.gdx.physics.box2d.FixtureDef;
|
||||
import com.me.brickbuster.Utils;
|
||||
import com.me.brickbuster.entity.Entity;
|
||||
import com.me.brickbuster.entity.PhysicsBody;
|
||||
import com.me.brickbuster.physics.PhysicsBody;
|
||||
import com.me.brickbuster.state.PlayState;
|
||||
import net.dermetfan.utils.Pair;
|
||||
|
||||
|
@ -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) {}
|
||||
|
||||
}
|
11
core/src/com/me/brickbuster/physics/CollisionListener.java
Normal file
11
core/src/com/me/brickbuster/physics/CollisionListener.java
Normal 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);
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package com.me.brickbuster.entity;
|
||||
package com.me.brickbuster.physics;
|
||||
|
||||
import com.badlogic.gdx.physics.box2d.Body;
|
||||
|
||||
@ -6,6 +6,4 @@ public interface PhysicsBody {
|
||||
|
||||
Body getBody();
|
||||
|
||||
//public void handleCollission(Entity other);
|
||||
|
||||
}
|
@ -11,6 +11,7 @@ import com.me.brickbuster.entity.Ball;
|
||||
import com.me.brickbuster.entity.Brick;
|
||||
import com.me.brickbuster.entity.Paddle;
|
||||
import com.me.brickbuster.entity.powerup.*;
|
||||
import com.me.brickbuster.physics.Box2dContactListener;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ -59,6 +60,7 @@ public class PlayState extends State {
|
||||
public void setup() {
|
||||
// Initialize a world with no gravity
|
||||
world = new World(new Vector2(), false);
|
||||
world.setContactListener(new Box2dContactListener());
|
||||
|
||||
// define a playArea body with position set to 0
|
||||
BodyDef playAreaDef = new BodyDef();
|
||||
|
Loading…
Reference in New Issue
Block a user