60 return ClosestRayResultCallback::addSingleResult (rayResult, normalInWorldSpace);
86 if (normalInWorldSpace)
100 return ClosestConvexResultCallback::addSingleResult (convexResult, normalInWorldSpace);
115 return direction - (
btScalar(2.0) * direction.
dot(normal)) * normal;
124 return normal * magnitude;
195 bool penetration =
false;
311 int numPenetrationLoops = 0;
315 numPenetrationLoops++;
317 if (numPenetrationLoops > 4)
369 if (normalMag != 0.0)
371 btVector3 perpComponent = perpindicularDir *
btScalar (normalMag*movementLength);
399 while (fraction >
btScalar(0.01) && maxIter-- > 0)
442 distance2 = currentDir.
length2();
468 bool runonce =
false;
484 if(downVelocity > 0.0 && downVelocity >
m_fallSpeed 546 if (downVelocity2 > 0.0 && downVelocity2 < stepHeight && has_hit ==
true && runonce ==
false 553 downVelocity = stepHeight;
615 m_useWalkDirection =
true;
616 m_walkDirection = walkDirection;
633 m_useWalkDirection =
false;
634 m_walkDirection = velocity;
636 m_velocityTimeInterval += timeInterval;
841 int numPenetrationLoops = 0;
845 numPenetrationLoops++;
847 if (numPenetrationLoops > 4)
887 currently no jumping.
889 m_rigidBody->getMotionState()->getWorldTransform (xform);
893 m_rigidBody->applyCentralImpulse (up * magnitude);
944 return sUpAxisDirection;
btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping...
void playerStep(btCollisionWorld *collisionWorld, btScalar dt)
btPairCachingGhostObject * m_ghostObject
void setUpVector(const btVector3 &up)
virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult &rayResult, bool normalInWorldSpace)
void stepDown(btCollisionWorld *collisionWorld, btScalar dt)
btKinematicClosestNotMeRayResultCallback(btCollisionObject *me)
~btKinematicCharacterController()
btScalar btRadians(btScalar x)
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
int getNumOverlappingPairs() const
btScalar m_velocityTimeInterval
virtual btVector3 getLinearVelocity() const
void setJumpSpeed(btScalar jumpSpeed)
btScalar btSin(btScalar x)
btQuaternion getRotation(btVector3 &v0, btVector3 &v1) const
btScalar length2() const
Return the length of the vector squared.
virtual void dispatchAllCollisionPairs(btOverlappingPairCache *pairCache, const btDispatcherInfo &dispatchInfo, btDispatcher *dispatcher)=0
btVector3 computeReflectionDirection(const btVector3 &direction, const btVector3 &normal)
int getNumContacts() const
btBroadphasePairArray & getOverlappingPairArray()
btScalar m_maxSlopeRadians
const btScalar & getY() const
Return the y value.
btVector3 getGravity() const
btScalar getMaxSlope() const
ManifoldContactPoint collects and maintains persistent contactpoints.
btVector3 m_normalizedDirection
btScalar m_maxSlopeCosine
btVector3 m_hitPointWorld
virtual void setVelocityForTimeInterval(const btVector3 &velocity, btScalar timeInterval)
Caller provides a velocity with which the character should move for the given time period.
void debugDraw(btIDebugDraw *debugDrawer)
btActionInterface interface
btVector3 & normalize()
Normalize this vector x^2 + y^2 + z^2 = 1.
btVector3 normalized() const
Return a normalized version of this vector.
The btConvexShape is an abstract shape interface, implemented by all convex shapes such as btBoxShape...
btScalar m_verticalVelocity
const btManifoldPoint & getContactPoint(int index) const
int m_collisionFilterGroup
btHashedOverlappingPairCache * getOverlappingPairCache()
const btCollisionObject * m_hitCollisionObject
btScalar m_maxPenetrationDepth
btQuaternion inverse() const
Return the inverse of this quaternion.
int m_collisionFilterMask
btTransform & getWorldTransform()
btVector3 m_normalWorldOnB
btScalar m_currentStepOffset
void getAabb(const btTransform &t, btVector3 &aabbMin, btVector3 &aabbMax) const =0
getAabb's default implementation is brute force, expected derived classes to implement a fast dedicat...
btBroadphaseProxy * getBroadphaseHandle()
static btVector3 getNormalizedVector(const btVector3 &v)
bool m_useGhostObjectSweepTest
btScalar m_angularDamping
const btCollisionObject * getBody0() const
btVector3 m_hitNormalLocal
virtual void setLinearVelocity(const btVector3 &velocity)
btQuaternion shortestArcQuatNormalize2(btVector3 &v0, btVector3 &v1)
btScalar dot(const btVector3 &v) const
Return the dot product.
void setGravity(const btVector3 &gravity)
ClosestConvexResultCallback(const btVector3 &convexFromWorld, const btVector3 &convexToWorld)
void jump(const btVector3 &v=btVector3())
void setMaxSlope(btScalar slopeRadians)
The max slope determines the maximum angle that the controller can walk up.
btCollisionObject can be used to manage collision detection objects.
bool recoverFromPenetration(btCollisionWorld *collisionWorld)
bool hasContactResponse() const
The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations.
void setFallSpeed(btScalar fallSpeed)
btVector3 m_hitNormalWorld
const btCollisionObject * m_collisionObject
int m_collisionFilterGroup
btVector3 m_currentPosition
void setWorldTransform(const btTransform &worldTrans)
btDispatcher * getDispatcher()
virtual btScalar getMargin() const =0
btVector3 parallelComponent(const btVector3 &direction, const btVector3 &normal)
int m_collisionFilterMask
btConvexShape * m_convexShape
void setStepHeight(btScalar h)
btBroadphaseProxy * m_pProxy1
btCollisionAlgorithm * m_algorithm
void warp(const btVector3 &origin)
virtual btScalar addSingleResult(btCollisionWorld::LocalConvexResult &convexResult, bool normalInWorldSpace)
btVector3 can be used to represent 3D points and vectors.
btManifoldArray m_manifoldArray
keep track of the contact manifolds
virtual void * removeOverlappingPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1, btDispatcher *dispatcher)
btScalar btPow(btScalar x, btScalar y)
virtual void getAllContactManifolds(btManifoldArray &manifoldArray)=0
btScalar btAcos(btScalar x)
int size() const
return the number of elements in the array
btVector3 m_walkDirection
this is the desired walk direction, set by the user
btBroadphaseProxy * m_pProxy0
void updateTargetPositionBasedOnCollision(const btVector3 &hit_normal, btScalar tangentMag=btScalar(0.0), btScalar normalMag=btScalar(1.0))
btVector3 m_targetPosition
btScalar m_verticalOffset
CollisionWorld is interface and container for the collision detection.
void convexSweepTest(const btConvexShape *castShape, const btTransform &from, const btTransform &to, ConvexResultCallback &resultCallback, btScalar allowedCcdPenetration=btScalar(0.)) const
convexTest performs a swept convex cast on all objects in the btCollisionWorld, and calls the resultC...
btDispatcherInfo & getDispatchInfo()
btPairCachingGhostObject * getGhostObject()
void stepUp(btCollisionWorld *collisionWorld)
btScalar m_allowedCcdPenetration
void resize(int newsize, const T &fillData=T())
void convexSweepTest(const class btConvexShape *castShape, const btTransform &convexFromWorld, const btTransform &convexToWorld, btCollisionWorld::ConvexResultCallback &resultCallback, btScalar allowedCcdPenetration=0.f) const
virtual void setAngularVelocity(const btVector3 &velocity)
void setMaxPenetrationDepth(btScalar d)
btVector3 perpindicularComponent(const btVector3 &direction, const btVector3 &normal)
void reset(btCollisionWorld *collisionWorld)
const btCollisionObject * m_hitCollisionObject
virtual const btVector3 & getAngularVelocity() const
btQuaternion m_targetOrientation
btScalar m_closestHitFraction
btKinematicClosestNotMeConvexResultCallback(btCollisionObject *me, const btVector3 &up, btScalar minSlopeDot)
virtual void setAabb(btBroadphaseProxy *proxy, const btVector3 &aabbMin, const btVector3 &aabbMax, btDispatcher *dispatcher)=0
void stepForwardAndStrafe(btCollisionWorld *collisionWorld, const btVector3 &walkMove)
btScalar getMaxPenetrationDepth() const
btQuaternion m_currentOrientation
void preStep(btCollisionWorld *collisionWorld)
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
virtual void setWalkDirection(const btVector3 &walkDirection)
This should probably be called setPositionIncrementPerSimulatorStep.
virtual void setMargin(btScalar margin)=0
void setUpInterpolate(bool value)
virtual bool needsCollision(const btCollisionObject *body0, const btCollisionObject *body1)
btKinematicCharacterController(btPairCachingGhostObject *ghostObject, btConvexShape *convexShape, btScalar stepHeight, const btVector3 &up=btVector3(1.0, 0.0, 0.0))
void setUp(const btVector3 &up)
void setMaxJumpHeight(btScalar maxJumpHeight)
void setInterpolate3(const btVector3 &v0, const btVector3 &v1, btScalar rt)
const btBroadphaseInterface * getBroadphase() const
static btVector3 * getUpAxisDirections()
Hash-space based Pair Cache, thanks to Erin Catto, Box2D, http://www.box2d.org, and Pierre Terdiman,...
btScalar getDistance() const
ClosestRayResultCallback(const btVector3 &rayFromWorld, const btVector3 &rayToWorld)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btScalar btCos(btScalar x)
btScalar length() const
Return the length of the vector.
btScalar btFabs(btScalar x)
The btBroadphasePair class contains a pair of aabb-overlapping objects.