OSDN Git Service

Use the more general collisionobject and collisionworld instead of dynamics for the...
authorXoppa <contact@xoppa.nl>
Thu, 31 Jan 2013 19:19:26 +0000 (20:19 +0100)
committerXoppa <contact@xoppa.nl>
Thu, 31 Jan 2013 19:19:26 +0000 (20:19 +0100)
tests/gdx-tests/src/com/badlogic/gdx/tests/bullet/BaseBulletTest.java
tests/gdx-tests/src/com/badlogic/gdx/tests/bullet/BulletConstructor.java
tests/gdx-tests/src/com/badlogic/gdx/tests/bullet/BulletEntity.java
tests/gdx-tests/src/com/badlogic/gdx/tests/bullet/BulletWorld.java
tests/gdx-tests/src/com/badlogic/gdx/tests/bullet/ConstraintsTest.java
tests/gdx-tests/src/com/badlogic/gdx/tests/bullet/DebugDrawer.java
tests/gdx-tests/src/com/badlogic/gdx/tests/bullet/InternalTickTest.java
tests/gdx-tests/src/com/badlogic/gdx/tests/bullet/RayCastTest.java
tests/gdx-tests/src/com/badlogic/gdx/tests/bullet/RayPickRagdollTest.java
tests/gdx-tests/src/com/badlogic/gdx/tests/bullet/SoftBodyTest.java
tests/gdx-tests/src/com/badlogic/gdx/tests/bullet/SoftMeshTest.java

index d800d37..b03ab9f 100644 (file)
@@ -31,6 +31,7 @@ import com.badlogic.gdx.math.collision.Ray;
 import com.badlogic.gdx.physics.bullet.Bullet;
 import com.badlogic.gdx.physics.bullet.btIDebugDraw;
 import com.badlogic.gdx.physics.bullet.btIDebugDraw.DebugDrawModes;
+import com.badlogic.gdx.physics.bullet.btRigidBody;
 import com.badlogic.gdx.physics.bullet.btTransform;
 import com.badlogic.gdx.utils.SharedLibraryLoader;
 
@@ -147,7 +148,7 @@ public class BaseBulletTest extends BulletTest {
                Ray ray = camera.getPickRay(x, y);
                BulletEntity entity = world.add(what, ray.origin.x, ray.origin.y, ray.origin.z);
                entity.color.set(0.5f + 0.5f * (float)Math.random(), 0.5f + 0.5f * (float)Math.random(), 0.5f + 0.5f * (float)Math.random(), 1f);
-               entity.body.applyCentralImpulse(ray.direction.mul(impulse));
+               ((btRigidBody)entity.body).applyCentralImpulse(ray.direction.mul(impulse));
        }
        
        public void setDebugMode(final int mode) {
index 0d13afe..307d518 100644 (file)
@@ -21,6 +21,7 @@ import com.badlogic.gdx.math.Matrix4;
 import com.badlogic.gdx.math.Vector3;
 import com.badlogic.gdx.math.collision.BoundingBox;
 import com.badlogic.gdx.physics.bullet.btBoxShape;
+import com.badlogic.gdx.physics.bullet.btCollisionObject;
 import com.badlogic.gdx.physics.bullet.btCollisionShape;
 import com.badlogic.gdx.physics.bullet.btRigidBodyConstructionInfo;
 
@@ -37,6 +38,13 @@ public class BulletConstructor extends BaseWorld.Constructor<BulletEntity> {
        public BulletConstructor (final Model model, final float mass, final btCollisionShape shape) {
                create(model, mass, shape);
        }
+       
+       /**
+        * Specify null for the shape to use only the renderable part of this entity and not the physics part. 
+        */
+       public BulletConstructor (final Model model, final btCollisionShape shape) {
+               this(model, -1f, shape);
+       }
 
        /**
         * Creates a btBoxShape with the specified dimensions.
@@ -46,6 +54,13 @@ public class BulletConstructor extends BaseWorld.Constructor<BulletEntity> {
        }
        
        /**
+        * Creates a btBoxShape with the specified dimensions and NO rigidbody.
+        */
+       public BulletConstructor (final Model model, final float width, final float height, final float depth) {
+               this(model, -1f, width, height, depth);
+       }
+       
+       /**
         * Creates a btBoxShape with the same dimensions as the shape.
         */
        public BulletConstructor (final Model model, final float mass) {
@@ -55,6 +70,13 @@ public class BulletConstructor extends BaseWorld.Constructor<BulletEntity> {
                create(model, mass, dimensions.x, dimensions.y, dimensions.z);
        }
        
+       /**
+        * Creates a btBoxShape with the same dimensions as the shape and NO rigidbody.
+        */
+       public BulletConstructor (final Model model) {
+               this(model, -1f);
+       }
+       
        private void create (final Model model, final float mass, final float width, final float height, final float depth) {                   
                // Create a simple boxshape
                create(model, mass, new btBoxShape(Vector3.tmp.set(width * 0.5f, height * 0.5f, depth * 0.5f)));
@@ -64,7 +86,7 @@ public class BulletConstructor extends BaseWorld.Constructor<BulletEntity> {
                this.model = model;
                this.shape = shape;
                
-               if (shape != null) {
+               if (shape != null && mass >= 0) {
                        // Calculate the local inertia, bodies with no mass are static
                        Vector3 localInertia;
                        if (mass == 0)
@@ -91,11 +113,21 @@ public class BulletConstructor extends BaseWorld.Constructor<BulletEntity> {
 
        @Override
        public BulletEntity construct (float x, float y, float z) {
-               return new BulletEntity(this, x, y, z);
+               if (bodyInfo == null && shape != null) {
+                       btCollisionObject obj = new btCollisionObject();
+                       obj.setCollisionShape(shape);
+                       return new BulletEntity(model, obj, x, y, z);
+               } else
+                       return new BulletEntity(model, bodyInfo, x, y, z);
        }
        
        @Override
        public BulletEntity construct (final Matrix4 transform) {
-               return new BulletEntity(this, transform);
+               if (bodyInfo == null && shape != null) {
+                       btCollisionObject obj = new btCollisionObject();
+                       obj.setCollisionShape(shape);
+                       return new BulletEntity(model, obj, transform);
+               } else
+               return new BulletEntity(model, bodyInfo, transform);
        }
 }
\ No newline at end of file
index fd31f11..27c55cc 100644 (file)
@@ -18,6 +18,8 @@ package com.badlogic.gdx.tests.bullet;
 import com.badlogic.gdx.graphics.Mesh;
 import com.badlogic.gdx.graphics.g3d.model.Model;
 import com.badlogic.gdx.math.Matrix4;
+import com.badlogic.gdx.physics.bullet.btCollisionObject;
+import com.badlogic.gdx.physics.bullet.btCollisionShape;
 import com.badlogic.gdx.physics.bullet.btMotionState;
 import com.badlogic.gdx.physics.bullet.btRigidBody;
 import com.badlogic.gdx.physics.bullet.btRigidBodyConstructionInfo;
@@ -29,31 +31,35 @@ import com.badlogic.gdx.utils.Disposable;
 public class BulletEntity extends BaseEntity {
        private final static Matrix4 tmpM = new Matrix4();
        public BulletEntity.MotionState motionState;
-       public btRigidBody body;
+       public btCollisionObject body;
 
        public BulletEntity (final Model model, final btRigidBodyConstructionInfo bodyInfo, final float x, final float y, final float z) {
-               this(model, bodyInfo, tmpM.setToTranslation(x, y, z));
+               this(model, bodyInfo == null ? null : new btRigidBody(bodyInfo), x, y, z);
        }
        
        public BulletEntity (final Model model, final btRigidBodyConstructionInfo bodyInfo, final Matrix4 transform) {
+               this(model, bodyInfo == null ? null : new btRigidBody(bodyInfo), transform);
+       }
+       
+       public BulletEntity (final Model model, final btCollisionObject body, final float x, final float y, final float z) {
+               this(model, body, tmpM.setToTranslation(x, y, z));
+       }
+       
+       public BulletEntity (final Model model, final btCollisionObject body, final Matrix4 transform) {
                this.model = model;
                this.transform.set(transform);
+               this.body = body;
                
-               if (bodyInfo != null) {
-                       this.motionState = new MotionState(this.transform);
-                       this.body = new btRigidBody(bodyInfo);
-                       this.body.setMotionState(motionState);
+               if (body != null) {
+                       body.userData = this;
+                       if (body instanceof btRigidBody) {
+                               this.motionState = new MotionState(this.transform);
+                               ((btRigidBody)this.body).setMotionState(motionState);
+                       } else
+                               body.setWorldTransform(transform);
                }
        }
 
-       public BulletEntity (final BulletConstructor constructInfo, final float x, final float y, final float z) {
-               this(constructInfo.model, constructInfo.bodyInfo, x, y, z);
-       }
-       
-       public BulletEntity (final BulletConstructor constructInfo, final Matrix4 transform) {
-               this(constructInfo.model, constructInfo.bodyInfo, transform);
-       }
-
        @Override
        public void dispose () {
                // Don't rely on the GC
index ed15e69..dce8381 100644 (file)
@@ -20,6 +20,8 @@ import com.badlogic.gdx.math.Matrix4;
 import com.badlogic.gdx.math.Vector3;
 import com.badlogic.gdx.math.WindowedMean;
 import com.badlogic.gdx.physics.bullet.btBroadphaseInterface;
+import com.badlogic.gdx.physics.bullet.btCollisionObject;
+import com.badlogic.gdx.physics.bullet.btCollisionWorld;
 import com.badlogic.gdx.physics.bullet.btIDebugDraw;
 import com.badlogic.gdx.physics.bullet.btCollisionConfiguration;
 import com.badlogic.gdx.physics.bullet.btCollisionDispatcher;
@@ -45,27 +47,28 @@ public class BulletWorld extends BaseWorld<BulletEntity> {
        public final btCollisionDispatcher dispatcher;
        public final btBroadphaseInterface broadphase;
        public final btConstraintSolver solver;
-       public final btDynamicsWorld dynamicsWorld;
+       public final btCollisionWorld collisionWorld;
        public PerformanceCounter performanceCounter;
        public final Vector3 gravity;   
        
        public int maxSubSteps = 5;
        
        public BulletWorld(final btCollisionConfiguration collisionConfiguration, final btCollisionDispatcher dispatcher,
-               final btBroadphaseInterface broadphase, final btConstraintSolver solver, final btDynamicsWorld dynamicsWorld,  
+               final btBroadphaseInterface broadphase, final btConstraintSolver solver, final btCollisionWorld world,  
                final Vector3 gravity) {
                this.collisionConfiguration = collisionConfiguration;
                this.dispatcher = dispatcher;
                this.broadphase = broadphase;
                this.solver = solver;
-               this.dynamicsWorld = dynamicsWorld;
-               this.dynamicsWorld.setGravity(gravity);
+               this.collisionWorld = world;
+               if (world instanceof btDynamicsWorld)
+                       ((btDynamicsWorld)this.collisionWorld).setGravity(gravity);
                this.gravity = gravity;
        }
        
        public BulletWorld(final btCollisionConfiguration collisionConfiguration, final btCollisionDispatcher dispatcher,
-               final btBroadphaseInterface broadphase, final btConstraintSolver solver, final btDynamicsWorld dynamicsWorld) {
-               this(collisionConfiguration, dispatcher, broadphase, solver, dynamicsWorld, new Vector3(0, -10, 0));
+               final btBroadphaseInterface broadphase, final btConstraintSolver solver, final btCollisionWorld world) {
+               this(collisionConfiguration, dispatcher, broadphase, solver, world, new Vector3(0, -10, 0));
        }
        
        public BulletWorld(final Vector3 gravity) {
@@ -73,8 +76,8 @@ public class BulletWorld extends BaseWorld<BulletEntity> {
                dispatcher = new btCollisionDispatcher(collisionConfiguration);
                broadphase = new btDbvtBroadphase();
                solver = new btSequentialImpulseConstraintSolver();
-               dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
-               dynamicsWorld.setGravity(gravity);
+               collisionWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
+               ((btDynamicsWorld)collisionWorld).setGravity(gravity);
                this.gravity = gravity;
        }
        
@@ -85,8 +88,12 @@ public class BulletWorld extends BaseWorld<BulletEntity> {
        @Override
        public void add(final BulletEntity entity) {
                super.add(entity);
-               if (entity.body != null)
-                       dynamicsWorld.addRigidBody(entity.body);
+               if (entity.body != null) {
+                       if (entity.body instanceof btRigidBody)
+                               ((btDiscreteDynamicsWorld)collisionWorld).addRigidBody((btRigidBody)entity.body);
+                       else
+                               collisionWorld.addCollisionObject(entity.body);
+               }
        }
        
        @Override
@@ -95,13 +102,14 @@ public class BulletWorld extends BaseWorld<BulletEntity> {
                performanceCounter.tick();
                performanceCounter.start();
                }
-               dynamicsWorld.stepSimulation(Gdx.graphics.getDeltaTime(), maxSubSteps);
+               if (collisionWorld instanceof btDynamicsWorld)
+                       ((btDynamicsWorld)collisionWorld).stepSimulation(Gdx.graphics.getDeltaTime(), maxSubSteps);
                if (performanceCounter != null)
                        performanceCounter.stop();
 
                if (debugDrawer != null && debugDrawer.getDebugMode() > 0) {
                        debugDrawer.begin();
-                       dynamicsWorld.debugDrawWorld();
+                       collisionWorld.debugDrawWorld();
                        debugDrawer.end();
                }
                if (renderMeshes)
@@ -111,25 +119,33 @@ public class BulletWorld extends BaseWorld<BulletEntity> {
        @Override
        public void dispose () {
                for (int i = 0; i < entities.size; i++) {
-                       btRigidBody body = entities.get(i).body;
-                       if (body != null)
-                               dynamicsWorld.removeRigidBody(body);
+                       btCollisionObject body = entities.get(i).body;
+                       if (body != null) {
+                               if (body instanceof btRigidBody)
+                                       ((btDynamicsWorld)collisionWorld).removeRigidBody((btRigidBody)body);
+                               else
+                                       collisionWorld.removeCollisionObject(body);
+                       }
                }
                
                super.dispose();
                
-               dynamicsWorld.delete();
-               solver.delete();
-               broadphase.delete();
-               dispatcher.delete();
-               collisionConfiguration.delete();
+               collisionWorld.delete();
+               if (solver != null)
+                       solver.delete();
+               if (broadphase != null)
+                       broadphase.delete();
+               if (dispatcher != null)
+                       dispatcher.delete();
+               if (collisionConfiguration != null)
+                       collisionConfiguration.delete();
        }
        
        public void setDebugMode(final int mode, final Matrix4 projMatrix) {
                if (mode == btIDebugDraw.DebugDrawModes.DBG_NoDebug && debugDrawer == null)
                        return;
                if (debugDrawer == null)
-                       dynamicsWorld.setDebugDrawer(debugDrawer = new DebugDrawer());
+                       collisionWorld.setDebugDrawer(debugDrawer = new DebugDrawer());
                debugDrawer.lineRenderer.setProjectionMatrix(projMatrix);
                debugDrawer.setDebugMode(mode);
        }
index f438002..9445175 100644 (file)
@@ -25,7 +25,10 @@ import com.badlogic.gdx.graphics.g3d.materials.Material;
 import com.badlogic.gdx.graphics.g3d.model.still.StillModel;
 import com.badlogic.gdx.graphics.g3d.model.still.StillSubMesh;
 import com.badlogic.gdx.math.Vector3;
+import com.badlogic.gdx.physics.bullet.btDiscreteDynamicsWorld;
+import com.badlogic.gdx.physics.bullet.btDynamicsWorld;
 import com.badlogic.gdx.physics.bullet.btPoint2PointConstraint;
+import com.badlogic.gdx.physics.bullet.btRigidBody;
 import com.badlogic.gdx.physics.bullet.btTypedConstraint;
 import com.badlogic.gdx.utils.Array;
 
@@ -60,32 +63,32 @@ public class ConstraintsTest extends BaseBulletTest {
                
                BulletEntity box1 = world.add("box", -4.5f, 6f, 0f);
                box1.color.set(0.5f + 0.5f * (float)Math.random(), 0.5f + 0.5f * (float)Math.random(), 0.5f + 0.5f * (float)Math.random(), 1f);
-               btPoint2PointConstraint constraint = new btPoint2PointConstraint(bar.body, box1.body, Vector3.tmp.set(-5, -0.5f, -0.5f), Vector3.tmp2.set(-0.5f, 0.5f, -0.5f));
-               world.dynamicsWorld.addConstraint(constraint, false);
+               btPoint2PointConstraint constraint = new btPoint2PointConstraint((btRigidBody)bar.body, (btRigidBody)box1.body, Vector3.tmp.set(-5, -0.5f, -0.5f), Vector3.tmp2.set(-0.5f, 0.5f, -0.5f));
+               ((btDynamicsWorld)world.collisionWorld).addConstraint(constraint, false);
                constraints.add(constraint);
                BulletEntity box2 = null;
                for (int i = 0; i < 10; i++) {
                        if (i % 2 == 0) {
                                box2 = world.add("box", -3.5f + (float)i, 6f, 0f);
                                box2.color.set(0.5f + 0.5f * (float)Math.random(), 0.5f + 0.5f * (float)Math.random(), 0.5f + 0.5f * (float)Math.random(), 1f);
-                               constraint = new btPoint2PointConstraint(box1.body, box2.body, Vector3.tmp.set(0.5f, -0.5f, 0.5f), Vector3.tmp2.set(-0.5f, -0.5f, 0.5f));
+                               constraint = new btPoint2PointConstraint((btRigidBody)box1.body, (btRigidBody)box2.body, Vector3.tmp.set(0.5f, -0.5f, 0.5f), Vector3.tmp2.set(-0.5f, -0.5f, 0.5f));
                        } else {
                                box1 = world.add("box", -3.5f + (float)i, 6f, 0f);
                                box1.color.set(0.5f + 0.5f * (float)Math.random(), 0.5f + 0.5f * (float)Math.random(), 0.5f + 0.5f * (float)Math.random(), 1f);
-                               constraint = new btPoint2PointConstraint(box2.body, box1.body, Vector3.tmp.set(0.5f, 0.5f, -0.5f), Vector3.tmp2.set(-0.5f, 0.5f, -0.5f));
+                               constraint = new btPoint2PointConstraint((btRigidBody)box2.body, (btRigidBody)box1.body, Vector3.tmp.set(0.5f, 0.5f, -0.5f), Vector3.tmp2.set(-0.5f, 0.5f, -0.5f));
                        }
-                       world.dynamicsWorld.addConstraint(constraint, false);
+                       ((btDynamicsWorld)world.collisionWorld).addConstraint(constraint, false);
                        constraints.add(constraint);
                }
-               constraint = new btPoint2PointConstraint(bar.body, box1.body, Vector3.tmp.set(5f, -0.5f, -0.5f), Vector3.tmp2.set(0.5f, 0.5f, -0.5f));
-               world.dynamicsWorld.addConstraint(constraint, false);
+               constraint = new btPoint2PointConstraint((btRigidBody)bar.body, (btRigidBody)box1.body, Vector3.tmp.set(5f, -0.5f, -0.5f), Vector3.tmp2.set(0.5f, 0.5f, -0.5f));
+               ((btDynamicsWorld)world.collisionWorld).addConstraint(constraint, false);
                constraints.add(constraint);
        }
        
        @Override
        public void dispose () {
                for (int i = 0; i < constraints.size; i++) {
-                       world.dynamicsWorld.removeConstraint(constraints.get(i));
+                       ((btDynamicsWorld)world.collisionWorld).removeConstraint(constraints.get(i));
                        constraints.get(i).delete();
                }
                constraints.clear();
index 05699c7..0a60f2e 100644 (file)
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ******************************************************************************/
+
 package com.badlogic.gdx.tests.bullet;
 
 import com.badlogic.gdx.Gdx;
@@ -24,6 +25,7 @@ import com.badlogic.gdx.physics.bullet.btIDebugDraw;
 import com.badlogic.gdx.physics.bullet.btVector3;
 import com.badlogic.gdx.physics.bullet.gdxBulletJNI;
 
+/** @author xoppa */
 public class DebugDrawer extends btIDebugDraw {
        public int debugMode = 0;
        public ShapeRenderer lineRenderer = new ShapeRenderer();
@@ -63,4 +65,4 @@ public class DebugDrawer extends btIDebugDraw {
        public void end() {
                lineRenderer.end();
        }
-}
\ No newline at end of file
+}
index 936a472..125fb1f 100644 (file)
@@ -60,7 +60,7 @@ public class InternalTickTest extends BaseBulletTest {
        public void create () {
                super.create();
                
-               internalTickCallback = new TestInternalTickCallback(world.dynamicsWorld);
+               internalTickCallback = new TestInternalTickCallback((btDynamicsWorld)world.collisionWorld);
 
                // Create the entities
                world.add("ground", 0f, 0f, 0f)
index 84b66e6..9885870 100644 (file)
@@ -83,7 +83,7 @@ public class RayCastTest extends BaseBulletTest {
                rayTestCB.getM_rayFromWorld().setValue(rayFrom.x, rayFrom.y, rayFrom.z);
                rayTestCB.getM_rayToWorld().setValue(rayTo.x, rayTo.y, rayTo.z);
                
-               world.dynamicsWorld.rayTest(rayFrom, rayTo, rayTestCB);
+               world.collisionWorld.rayTest(rayFrom, rayTo, rayTestCB);
                
                if (rayTestCB.hasHit()) {
                        final btCollisionObject obj = rayTestCB.getM_collisionObject();
index c9f55c9..a7fe760 100644 (file)
@@ -32,6 +32,7 @@ import com.badlogic.gdx.physics.bullet.ClosestRayResultCallback;
 import com.badlogic.gdx.physics.bullet.btCapsuleShape;
 import com.badlogic.gdx.physics.bullet.btConeTwistConstraint;
 import com.badlogic.gdx.physics.bullet.btConstraintSetting;
+import com.badlogic.gdx.physics.bullet.btDynamicsWorld;
 import com.badlogic.gdx.physics.bullet.btHingeConstraint;
 import com.badlogic.gdx.physics.bullet.btPoint2PointConstraint;
 import com.badlogic.gdx.physics.bullet.btRigidBody;
@@ -76,7 +77,7 @@ public class RayPickRagdollTest extends BaseBulletTest {
        @Override
        public void dispose () {
                for (int i = 0; i < constraints.size; i++) {
-                       world.dynamicsWorld.removeConstraint(constraints.get(i));
+                       ((btDynamicsWorld)world.collisionWorld).removeConstraint(constraints.get(i));
                        constraints.get(i).delete();
                }
                constraints.clear();
@@ -90,7 +91,7 @@ public class RayPickRagdollTest extends BaseBulletTest {
                        Ray ray = camera.getPickRay(screenX, screenY);
                        Vector3.tmp.set(ray.direction).mul(10f).add(ray.origin);
                        ClosestRayResultCallback cb = new ClosestRayResultCallback(ray.origin, Vector3.tmp);
-                       world.dynamicsWorld.rayTest(ray.origin, Vector3.tmp, cb);
+                       world.collisionWorld.rayTest(ray.origin, Vector3.tmp, cb);
                        if (cb.hasHit()) {
                                btRigidBody body = btRigidBody.upcast(cb.getM_collisionObject());
                                if (body != null && !body.isStaticObject() && !body.isKinematicObject()) {
@@ -107,7 +108,7 @@ public class RayPickRagdollTest extends BaseBulletTest {
                                        setting.setM_tau(0.001f);
                                        pickConstraint.setM_setting(setting);
                                        
-                                       world.dynamicsWorld.addConstraint(pickConstraint);
+                                       ((btDynamicsWorld)world.collisionWorld).addConstraint(pickConstraint);
                
                                        pickDistance = Vector3.tmp.sub(camera.position).len();
                                        result = true;
@@ -123,7 +124,7 @@ public class RayPickRagdollTest extends BaseBulletTest {
                boolean result = false;
                if (button == Buttons.LEFT) {
                        if (pickConstraint != null) {
-                               world.dynamicsWorld.removeConstraint(pickConstraint);
+                               ((btDynamicsWorld)world.collisionWorld).removeConstraint(pickConstraint);
                                pickConstraint.delete();
                                pickConstraint = null;
                                result = true;
@@ -160,17 +161,17 @@ public class RayPickRagdollTest extends BaseBulletTest {
        final static float PI4 = 0.25f * PI;
        public void addRagdoll(final float x, final float y, final float z) {
                final Matrix4 tmpM = new Matrix4();
-               btRigidBody pelvis = world.add("pelvis", x, y+1, z).body;
-               btRigidBody spine = world.add("spine", x, y+1.2f, z).body;
-               btRigidBody head = world.add("head", x, y+1.6f, z).body;
-               btRigidBody leftupperleg = world.add("upperleg", x-0.18f, y+0.65f, z).body;
-               btRigidBody leftlowerleg = world.add("lowerleg", x-0.18f, y+0.2f, z).body;
-               btRigidBody rightupperleg = world.add("upperleg", x+0.18f, y+0.65f, z).body;
-               btRigidBody rightlowerleg = world.add("lowerleg", x+0.18f, y+0.2f, z).body;             
-               btRigidBody leftupperarm = world.add("upperarm", tmpM.setFromEulerAngles(PI2, 0, 0).trn(x-0.35f, y+1.45f, z)).body;
-               btRigidBody leftlowerarm = world.add("lowerarm", tmpM.setFromEulerAngles(PI2, 0, 0).trn(x-0.7f, y+1.45f, z)).body;
-               btRigidBody rightupperarm = world.add("upperarm", tmpM.setFromEulerAngles(-PI2, 0, 0).trn(x+0.35f, y+1.45f, z)).body;
-               btRigidBody rightlowerarm = world.add("lowerarm", tmpM.setFromEulerAngles(-PI2, 0, 0).trn(x+0.7f, y+1.45f, z)).body;
+               btRigidBody pelvis = (btRigidBody)world.add("pelvis", x, y+1, z).body;
+               btRigidBody spine = (btRigidBody)world.add("spine", x, y+1.2f, z).body;
+               btRigidBody head = (btRigidBody)world.add("head", x, y+1.6f, z).body;
+               btRigidBody leftupperleg = (btRigidBody)world.add("upperleg", x-0.18f, y+0.65f, z).body;
+               btRigidBody leftlowerleg = (btRigidBody)world.add("lowerleg", x-0.18f, y+0.2f, z).body;
+               btRigidBody rightupperleg = (btRigidBody)world.add("upperleg", x+0.18f, y+0.65f, z).body;
+               btRigidBody rightlowerleg = (btRigidBody)world.add("lowerleg", x+0.18f, y+0.2f, z).body;                
+               btRigidBody leftupperarm = (btRigidBody)world.add("upperarm", tmpM.setFromEulerAngles(PI2, 0, 0).trn(x-0.35f, y+1.45f, z)).body;
+               btRigidBody leftlowerarm = (btRigidBody)world.add("lowerarm", tmpM.setFromEulerAngles(PI2, 0, 0).trn(x-0.7f, y+1.45f, z)).body;
+               btRigidBody rightupperarm = (btRigidBody)world.add("upperarm", tmpM.setFromEulerAngles(-PI2, 0, 0).trn(x+0.35f, y+1.45f, z)).body;
+               btRigidBody rightlowerarm = (btRigidBody)world.add("lowerarm", tmpM.setFromEulerAngles(-PI2, 0, 0).trn(x+0.7f, y+1.45f, z)).body;
                
                final Matrix4 localA = new Matrix4();
                final Matrix4 localB = new Matrix4();
@@ -182,70 +183,70 @@ public class RayPickRagdollTest extends BaseBulletTest {
                localB.setFromEulerAngles(0, PI2, 0).trn(0, -0.15f, 0);
                constraints.add(hingeC = new btHingeConstraint(pelvis, spine, localA, localB));
                hingeC.setLimit(-PI4, PI2);
-               world.dynamicsWorld.addConstraint(hingeC, true);
+               ((btDynamicsWorld)world.collisionWorld).addConstraint(hingeC, true);
                
                // SpineHead
                localA.setFromEulerAngles(PI2, 0, 0).trn(0, 0.3f, 0);
                localB.setFromEulerAngles(PI2, 0, 0).trn(0, -0.14f, 0);
                constraints.add(coneC = new btConeTwistConstraint(spine, head, localA, localB));
                coneC.setLimit(PI4, PI4, PI2);
-               world.dynamicsWorld.addConstraint(coneC, true);
+               ((btDynamicsWorld)world.collisionWorld).addConstraint(coneC, true);
                
                // LeftHip
                localA.setFromEulerAngles(-PI4*5f, 0, 0).trn(-0.18f, -0.1f, 0);
                localB.setFromEulerAngles(-PI4*5f, 0, 0).trn(0, 0.225f, 0);
                constraints.add(coneC = new btConeTwistConstraint(pelvis, leftupperleg, localA, localB));
                coneC.setLimit(PI4, PI4, 0);
-               world.dynamicsWorld.addConstraint(coneC, true);
+               ((btDynamicsWorld)world.collisionWorld).addConstraint(coneC, true);
                
                // LeftKnee
                localA.setFromEulerAngles(0, PI2, 0).trn(0, -0.225f, 0);
                localB.setFromEulerAngles(0, PI2, 0).trn(0, 0.185f, 0);
                constraints.add(hingeC = new btHingeConstraint(leftupperleg, leftlowerleg, localA, localB));
                hingeC.setLimit(0, PI2);
-               world.dynamicsWorld.addConstraint(hingeC, true);
+               ((btDynamicsWorld)world.collisionWorld).addConstraint(hingeC, true);
                
                // RightHip
                localA.setFromEulerAngles(-PI4*5f, 0, 0).trn(0.18f, -0.1f, 0);
                localB.setFromEulerAngles(-PI4*5f, 0, 0).trn(0, 0.225f, 0);
                constraints.add(coneC = new btConeTwistConstraint(pelvis, rightupperleg, localA, localB));
                coneC.setLimit(PI4, PI4, 0);
-               world.dynamicsWorld.addConstraint(coneC, true);
+               ((btDynamicsWorld)world.collisionWorld).addConstraint(coneC, true);
                
                // RightKnee
                localA.setFromEulerAngles(0, PI2, 0).trn(0, -0.225f, 0);
                localB.setFromEulerAngles(0, PI2, 0).trn(0, 0.185f, 0);
                constraints.add(hingeC = new btHingeConstraint(rightupperleg, rightlowerleg, localA, localB));
                hingeC.setLimit(0, PI2);
-               world.dynamicsWorld.addConstraint(hingeC, true);
+               ((btDynamicsWorld)world.collisionWorld).addConstraint(hingeC, true);
                
                // LeftShoulder
                localA.setFromEulerAngles(PI, 0, 0).trn(-0.2f, 0.15f, 0);
                localB.setFromEulerAngles(PI2, 0, 0).trn(0, -0.18f, 0);
                constraints.add(coneC = new btConeTwistConstraint(pelvis, leftupperarm, localA, localB));
                coneC.setLimit(PI2, PI2, 0);
-               world.dynamicsWorld.addConstraint(coneC, true);
+               ((btDynamicsWorld)world.collisionWorld).addConstraint(coneC, true);
                
                // LeftElbow
                localA.setFromEulerAngles(0, PI2, 0).trn(0, 0.18f, 0);
                localB.setFromEulerAngles(0, PI2, 0).trn(0, -0.14f, 0);
                constraints.add(hingeC = new btHingeConstraint(leftupperarm, leftlowerarm, localA, localB));
                hingeC.setLimit(0, PI2);
-               world.dynamicsWorld.addConstraint(hingeC, true);
+               ((btDynamicsWorld)world.collisionWorld).addConstraint(hingeC, true);
                
                // RightShoulder
                localA.setFromEulerAngles(PI, 0, 0).trn(0.2f, 0.15f, 0);
                localB.setFromEulerAngles(PI2, 0, 0).trn(0, -0.18f, 0);
                constraints.add(coneC = new btConeTwistConstraint(pelvis, rightupperarm, localA, localB));
                coneC.setLimit(PI2, PI2, 0);
-               world.dynamicsWorld.addConstraint(coneC, true);
+               ((btDynamicsWorld)world.collisionWorld).addConstraint(coneC, true);
                
                // RightElbow
                localA.setFromEulerAngles(0, PI2, 0).trn(0, 0.18f, 0);
                localB.setFromEulerAngles(0, PI2, 0).trn(0, -0.14f, 0);
                constraints.add(hingeC = new btHingeConstraint(rightupperarm, rightlowerarm, localA, localB));
                hingeC.setLimit(0, PI2);
-               world.dynamicsWorld.addConstraint(hingeC, true);
+               ((btDynamicsWorld)world.collisionWorld).addConstraint(hingeC, true);
        }
        
        protected Model createCapsuleModel(float radius, float height) {
index 9d37915..ed0daa6 100644 (file)
@@ -81,7 +81,7 @@ public class SoftBodyTest extends BaseBulletTest {
                softBody = btSoftBodyHelpers.CreatePatch(worldInfo, patch00, patch10, patch01, patch11, 15, 15, 15, false);
                softBody.takeOwnership();
                softBody.setTotalMass(100f);
-               ((btSoftRigidDynamicsWorld)(world.dynamicsWorld)).addSoftBody(softBody);
+               ((btSoftRigidDynamicsWorld)(world.collisionWorld)).addSoftBody(softBody);
                
                final int vertCount = softBody.getNodeCount();
                final int faceCount = softBody.getFaceCount(); 
@@ -107,7 +107,7 @@ public class SoftBodyTest extends BaseBulletTest {
        
        @Override
        public void dispose () {
-               ((btSoftRigidDynamicsWorld)(world.dynamicsWorld)).removeSoftBody(softBody);
+               ((btSoftRigidDynamicsWorld)(world.collisionWorld)).removeSoftBody(softBody);
                softBody.delete();
                softBody = null;
                
index 33b8984..1ff8203 100644 (file)
@@ -87,12 +87,12 @@ public class SoftMeshTest extends BaseBulletTest {
                softBody.randomizeConstraints();
                softBody.setTotalMass(1);
                softBody.translate(Vector3.tmp.set(1, 5, 1));
-               ((btSoftRigidDynamicsWorld)(world.dynamicsWorld)).addSoftBody(softBody);
+               ((btSoftRigidDynamicsWorld)(world.collisionWorld)).addSoftBody(softBody);
        }
        
        @Override
        public void dispose () {
-               ((btSoftRigidDynamicsWorld)(world.dynamicsWorld)).removeSoftBody(softBody);
+               ((btSoftRigidDynamicsWorld)(world.collisionWorld)).removeSoftBody(softBody);
                softBody.delete();
                softBody = null;