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;
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) {
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;
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.
}
/**
+ * 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) {
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)));
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)
@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
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;
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
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;
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) {
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;
}
@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
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)
@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);
}
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;
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();
* 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;
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();
public void end() {
lineRenderer.end();
}
-}
\ No newline at end of file
+}
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)
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();
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;
@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();
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()) {
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;
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;
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();
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) {
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();
@Override
public void dispose () {
- ((btSoftRigidDynamicsWorld)(world.dynamicsWorld)).removeSoftBody(softBody);
+ ((btSoftRigidDynamicsWorld)(world.collisionWorld)).removeSoftBody(softBody);
softBody.delete();
softBody = null;
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;