• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 package com.badlogic.gdx.tests.bullet;
3 
4 import com.badlogic.gdx.Gdx;
5 import com.badlogic.gdx.graphics.Texture;
6 import com.badlogic.gdx.graphics.VertexAttributes.Usage;
7 import com.badlogic.gdx.graphics.g3d.Material;
8 import com.badlogic.gdx.graphics.g3d.Model;
9 import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
10 import com.badlogic.gdx.graphics.g3d.attributes.FloatAttribute;
11 import com.badlogic.gdx.graphics.g3d.attributes.TextureAttribute;
12 import com.badlogic.gdx.math.MathUtils;
13 import com.badlogic.gdx.physics.bullet.collision.CustomCollisionDispatcher;
14 import com.badlogic.gdx.physics.bullet.collision.btBoxShape;
15 import com.badlogic.gdx.physics.bullet.collision.btCapsuleShape;
16 import com.badlogic.gdx.physics.bullet.collision.btCollisionConfiguration;
17 import com.badlogic.gdx.physics.bullet.collision.btCollisionDispatcher;
18 import com.badlogic.gdx.physics.bullet.collision.btCollisionObject;
19 import com.badlogic.gdx.physics.bullet.collision.btConeShape;
20 import com.badlogic.gdx.physics.bullet.collision.btCylinderShape;
21 import com.badlogic.gdx.physics.bullet.collision.btDbvtBroadphase;
22 import com.badlogic.gdx.physics.bullet.collision.btDefaultCollisionConfiguration;
23 import com.badlogic.gdx.physics.bullet.collision.btSphereShape;
24 import com.badlogic.gdx.physics.bullet.dynamics.btDiscreteDynamicsWorld;
25 import com.badlogic.gdx.physics.bullet.dynamics.btSequentialImpulseConstraintSolver;
26 
27 public class CollisionDispatcherTest extends BaseBulletTest {
28 	public static class MyCollisionDispatcher extends CustomCollisionDispatcher {
MyCollisionDispatcher(btCollisionConfiguration collisionConfiguration)29 		public MyCollisionDispatcher (btCollisionConfiguration collisionConfiguration) {
30 			super(collisionConfiguration);
31 		}
32 
33 		@Override
needsCollision(btCollisionObject body0, btCollisionObject body1)34 		public boolean needsCollision (btCollisionObject body0, btCollisionObject body1) {
35 			if (body0.getUserValue() % 2 == 0 || body1.getUserValue() % 2 == 0) return super.needsCollision(body0, body1);
36 			return false;
37 		}
38 
39 		@Override
needsResponse(btCollisionObject body0, btCollisionObject body1)40 		public boolean needsResponse (btCollisionObject body0, btCollisionObject body1) {
41 			if (body0.getUserValue() % 2 == 0 || body1.getUserValue() % 2 == 0) return super.needsCollision(body0, body1);
42 			return false;
43 		}
44 	}
45 
46 	@Override
createWorld()47 	public BulletWorld createWorld () {
48 		btDefaultCollisionConfiguration collisionConfiguration = new btDefaultCollisionConfiguration();
49 		MyCollisionDispatcher dispatcher = new MyCollisionDispatcher(collisionConfiguration);
50 		btDbvtBroadphase broadphase = new btDbvtBroadphase();
51 		btSequentialImpulseConstraintSolver solver = new btSequentialImpulseConstraintSolver();
52 		btDiscreteDynamicsWorld collisionWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
53 		return new BulletWorld(collisionConfiguration, dispatcher, broadphase, solver, collisionWorld);
54 	}
55 
56 	@Override
create()57 	public void create () {
58 		super.create();
59 
60 		// Create the entities
61 		world.add("ground", 0f, 0f, 0f).setColor(0.25f + 0.5f * (float)Math.random(), 0.25f + 0.5f * (float)Math.random(),
62 			0.25f + 0.5f * (float)Math.random(), 1f);
63 		for (float x = -5f; x <= 5f; x += 2f) {
64 			for (float y = 5f; y <= 15f; y += 2f) {
65 				world.add("box", x + 0.1f * MathUtils.random(), y + 0.1f * MathUtils.random(), 0.1f * MathUtils.random()).body
66 					.setUserValue((int)((x + 5f) / 2f + .5f));
67 			}
68 		}
69 	}
70 
71 	@Override
tap(float x, float y, int count, int button)72 	public boolean tap (float x, float y, int count, int button) {
73 		shoot(x, y);
74 		return true;
75 	}
76 }
77