From b9bc96e22bcc5f7f1c5de35e9fc3717a1aad45a1 Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Wed, 9 Jul 2008 18:41:41 +0000 Subject: [PATCH] use a btCollisionWorld instead of btDynamicsWorld, thanks reltham for the feedback http://www.bulletphysics.com/Bullet/phpBB3/viewtopic.php?f=9&t=2317&p=9197#p9197 --- .../CharacterControllerInterface.h | 6 ++-- .../DynamicCharacterController.cpp | 8 ++--- .../DynamicCharacterController.h | 6 ++-- .../KinematicCharacterController.cpp | 36 +++++++++---------- .../KinematicCharacterController.h | 14 ++++---- 5 files changed, 34 insertions(+), 36 deletions(-) diff --git a/Demos/CharacterDemo/CharacterControllerInterface.h b/Demos/CharacterDemo/CharacterControllerInterface.h index e481ef3d9..f2189bb8e 100644 --- a/Demos/CharacterDemo/CharacterControllerInterface.h +++ b/Demos/CharacterDemo/CharacterControllerInterface.h @@ -5,7 +5,7 @@ class btCollisionShape; class btRigidBody; -class btDynamicsWorld; +class btCollisionWorld; class CharacterControllerInterface { @@ -20,8 +20,8 @@ public: virtual void reset () = 0; virtual void warp (const btVector3& origin) = 0; virtual void registerPairCacheAndDispatcher (btOverlappingPairCache* pairCache, btCollisionDispatcher* dispatcher)=0; - virtual void preStep (const btDynamicsWorld* dynamicsWorld) = 0; - virtual void playerStep (const btDynamicsWorld* dynamicsWorld, btScalar dt, + virtual void preStep (const btCollisionWorld* collisionWorld) = 0; + virtual void playerStep (const btCollisionWorld* collisionWorld, btScalar dt, int forward, int backward, int left, diff --git a/Demos/CharacterDemo/DynamicCharacterController.cpp b/Demos/CharacterDemo/DynamicCharacterController.cpp index 73980ac0b..084969f99 100644 --- a/Demos/CharacterDemo/DynamicCharacterController.cpp +++ b/Demos/CharacterDemo/DynamicCharacterController.cpp @@ -1,6 +1,6 @@ #include "BulletCollision/CollisionShapes/btMultiSphereShape.h" #include "BulletDynamics/Dynamics/btRigidBody.h" -#include "BulletDynamics/Dynamics/btDynamicsWorld.h" +#include "BulletCollision/CollisionDispatch/btCollisionWorld.h" #include "LinearMath/btDefaultMotionState.h" #include "DynamicCharacterController.h" @@ -67,7 +67,7 @@ btCollisionObject* DynamicCharacterController::getCollisionObject () return m_rigidBody; } -void DynamicCharacterController::preStep (const btDynamicsWorld* dynamicsWorld) +void DynamicCharacterController::preStep (const btCollisionWorld* collisionWorld) { btTransform xform; m_rigidBody->getMotionState()->getWorldTransform (xform); @@ -108,7 +108,7 @@ void DynamicCharacterController::preStep (const btDynamicsWorld* dynamicsWorld) for (i = 0; i < 2; i++) { rayCallback.m_closestHitFraction = 1.0; - dynamicsWorld->rayTest (m_raySource[i], m_rayTarget[i], rayCallback); + collisionWorld->rayTest (m_raySource[i], m_rayTarget[i], rayCallback); if (rayCallback.HasHit()) { m_rayLambda[i] = rayCallback.m_closestHitFraction; @@ -118,7 +118,7 @@ void DynamicCharacterController::preStep (const btDynamicsWorld* dynamicsWorld) } } -void DynamicCharacterController::playerStep (const btDynamicsWorld* dynaWorld,btScalar dt, +void DynamicCharacterController::playerStep (const btCollisionWorld* dynaWorld,btScalar dt, int forward, int backward, int left, diff --git a/Demos/CharacterDemo/DynamicCharacterController.h b/Demos/CharacterDemo/DynamicCharacterController.h index b8992fd78..f2c80b59a 100644 --- a/Demos/CharacterDemo/DynamicCharacterController.h +++ b/Demos/CharacterDemo/DynamicCharacterController.h @@ -7,7 +7,7 @@ class btCollisionShape; class btRigidBody; -class btDynamicsWorld; +class btCollisionWorld; ///DynamicCharacterController is obsolete/unsupported at the moment class DynamicCharacterController : public CharacterControllerInterface @@ -39,8 +39,8 @@ public: btCollisionObject* getCollisionObject (); - void preStep (const btDynamicsWorld* dynamicsWorld); - void playerStep (const btDynamicsWorld* dynaWorld,btScalar dt, + void preStep (const btCollisionWorld* collisionWorld); + void playerStep (const btCollisionWorld* collisionWorld,btScalar dt, int forward, int backward, int left, diff --git a/Demos/CharacterDemo/KinematicCharacterController.cpp b/Demos/CharacterDemo/KinematicCharacterController.cpp index 6d491a1bd..11894dff8 100644 --- a/Demos/CharacterDemo/KinematicCharacterController.cpp +++ b/Demos/CharacterDemo/KinematicCharacterController.cpp @@ -1,12 +1,10 @@ -#include #include "GLDebugDrawer.h" #include "BulletCollision/CollisionShapes/btMultiSphereShape.h" #include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h" #include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h" -#include "BulletDynamics/Dynamics/btRigidBody.h" -#include "BulletDynamics/Dynamics/btDynamicsWorld.h" +#include "BulletCollision/CollisionDispatch/btCollisionWorld.h" #include "LinearMath/btDefaultMotionState.h" #include "KinematicCharacterController.h" @@ -87,7 +85,7 @@ btVector3 perpindicularComponent (const btVector3& direction, const btVector3& n KinematicCharacterController::KinematicCharacterController () { m_turnAngle = btScalar(0.0); - m_walkVelocity = btScalar(1.1) * 14.0; // 4 km/h -> 1.1 m/s + m_walkVelocity = btScalar(1.1) * 4.0; // 4 km/h -> 1.1 m/s m_shape = NULL; m_pairCache = NULL; m_collisionObject = NULL; @@ -117,7 +115,7 @@ void KinematicCharacterController::setup (btScalar height, btScalar width, btSca startTransform.setIdentity (); startTransform.setOrigin (btVector3(0.0, 4.0, 0.0)); //btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - //btRigidBody::btRigidBodyConstructionInfo cInfo(1.0, myMotionState, m_shape); + m_collisionObject = new btCollisionObject (); m_collisionObject->setWorldTransform(startTransform); @@ -144,7 +142,7 @@ btCollisionObject* KinematicCharacterController::getCollisionObject () return m_collisionObject; } -bool KinematicCharacterController::recoverFromPenetration (const btDynamicsWorld* dynamicsWorld) +bool KinematicCharacterController::recoverFromPenetration (const btCollisionWorld* collisionWorld) { if (m_pairCache == NULL) @@ -153,7 +151,7 @@ bool KinematicCharacterController::recoverFromPenetration (const btDynamicsWorld bool penetration = false; - m_dispatcher->dispatchAllCollisionPairs (m_pairCache, dynamicsWorld->getDispatchInfo(), m_dispatcher); + m_dispatcher->dispatchAllCollisionPairs (m_pairCache, collisionWorld->getDispatchInfo(), m_dispatcher); m_currentPosition = m_collisionObject->getWorldTransform().getOrigin(); @@ -201,7 +199,7 @@ bool KinematicCharacterController::recoverFromPenetration (const btDynamicsWorld return penetration; } -void KinematicCharacterController::stepUp (const btDynamicsWorld* dynamicsWorld) +void KinematicCharacterController::stepUp (const btCollisionWorld* world) { // phase 1: up btTransform start, end; @@ -216,7 +214,7 @@ void KinematicCharacterController::stepUp (const btDynamicsWorld* dynamicsWorld) ClosestNotMeConvexResultCallback callback (m_collisionObject); - dynamicsWorld->convexSweepTest (m_shape, start, end, callback); + world->convexSweepTest (m_shape, start, end, callback); if (callback.HasHit()) { @@ -265,7 +263,7 @@ void KinematicCharacterController::updateTargetPositionBasedOnCollision (const b } } -void KinematicCharacterController::stepForwardAndStrafe (const btDynamicsWorld* dynamicsWorld, const btVector3& walkMove) +void KinematicCharacterController::stepForwardAndStrafe (const btCollisionWorld* collisionWorld, const btVector3& walkMove) { btVector3 originalDir = walkMove.normalized(); @@ -301,7 +299,7 @@ void KinematicCharacterController::stepForwardAndStrafe (const btDynamicsWorld* //btScalar margin = m_shape->getMargin(); //m_shape->setMargin(margin - 0.06f); - dynamicsWorld->convexSweepTest (m_shape, start, end, callback); + collisionWorld->convexSweepTest (m_shape, start, end, callback); //m_shape->setMargin(margin); @@ -350,7 +348,7 @@ void KinematicCharacterController::stepForwardAndStrafe (const btDynamicsWorld* } } -void KinematicCharacterController::stepDown (const btDynamicsWorld* dynamicsWorld, btScalar dt) +void KinematicCharacterController::stepDown (const btCollisionWorld* collisionWorld, btScalar dt) { btTransform start, end; @@ -367,7 +365,7 @@ void KinematicCharacterController::stepDown (const btDynamicsWorld* dynamicsWorl ClosestNotMeConvexResultCallback callback (m_collisionObject); - dynamicsWorld->convexSweepTest (m_shape, start, end, callback); + collisionWorld->convexSweepTest (m_shape, start, end, callback); if (callback.HasHit()) { @@ -398,12 +396,12 @@ void KinematicCharacterController::registerPairCacheAndDispatcher (btOverlapping m_dispatcher = dispatcher; } -void KinematicCharacterController::preStep (const btDynamicsWorld* dynamicsWorld) +void KinematicCharacterController::preStep (const btCollisionWorld* collisionWorld) { int numPenetrationLoops = 0; m_touchingContact = false; - while (recoverFromPenetration (dynamicsWorld)) + while (recoverFromPenetration (collisionWorld)) { numPenetrationLoops++; m_touchingContact = true; @@ -435,7 +433,7 @@ void KinematicCharacterController::preStep (const btDynamicsWorld* dynamicsWorld } -void KinematicCharacterController::playerStep (const btDynamicsWorld* dynamicsWorld, +void KinematicCharacterController::playerStep (const btCollisionWorld* collisionWorld, btScalar dt, int forward, int backward, @@ -464,9 +462,9 @@ void KinematicCharacterController::playerStep (const btDynamicsWorld* dynamicsWo // printf("walkDirection(%f,%f,%f)\n",walkDirection[0],walkDirection[1],walkDirection[2]); // printf("walkSpeed=%f\n",walkSpeed); - stepUp (dynamicsWorld); - stepForwardAndStrafe (dynamicsWorld, walkDirection * walkSpeed); - stepDown (dynamicsWorld, dt); + stepUp (collisionWorld); + stepForwardAndStrafe (collisionWorld, walkDirection * walkSpeed); + stepDown (collisionWorld, dt); xform.setOrigin (m_currentPosition); m_collisionObject->setWorldTransform (xform); diff --git a/Demos/CharacterDemo/KinematicCharacterController.h b/Demos/CharacterDemo/KinematicCharacterController.h index aa4c734a6..aa8020c0f 100644 --- a/Demos/CharacterDemo/KinematicCharacterController.h +++ b/Demos/CharacterDemo/KinematicCharacterController.h @@ -7,7 +7,7 @@ class btCollisionShape; class btRigidBody; -class btDynamicsWorld; +class btCollisionWorld; class btCollisionDispatcher; @@ -47,11 +47,11 @@ protected: bool m_touchingContact; btVector3 m_touchingNormal; - bool recoverFromPenetration (const btDynamicsWorld* dynamicsWorld); - void stepUp (const btDynamicsWorld* dynamicsWorld); + bool recoverFromPenetration (const btCollisionWorld* collisionWorld); + void stepUp (const btCollisionWorld* collisionWorld); void updateTargetPositionBasedOnCollision (const btVector3& hit_normal, btScalar tangentMag = btScalar(0.0), btScalar normalMag = btScalar(1.0)); - void stepForwardAndStrafe (const btDynamicsWorld* dynamicsWorld, const btVector3& walkMove); - void stepDown (const btDynamicsWorld* dynamicsWorld, btScalar dt); + void stepForwardAndStrafe (const btCollisionWorld* collisionWorld, const btVector3& walkMove); + void stepDown (const btCollisionWorld* collisionWorld, btScalar dt); public: KinematicCharacterController (); ~KinematicCharacterController (); @@ -64,8 +64,8 @@ public: void warp (const btVector3& origin); virtual void registerPairCacheAndDispatcher (btOverlappingPairCache* pairCache, btCollisionDispatcher* dispatcher); - void preStep (const btDynamicsWorld* dynamicsWorld); - void playerStep (const btDynamicsWorld* dynamicsWorld, btScalar dt, + void preStep (const btCollisionWorld* collisionWorld); + void playerStep (const btCollisionWorld* collisionWorld, btScalar dt, int forward, int backward, int left,