1 diff -urN bullet.orig/src/BulletDynamics/Character/btKinematicCharacterController.cpp bullet.new/src/BulletDynamics/Character/btKinematicCharacterController.cpp
2 --- bullet.orig/src/BulletDynamics/Character/btKinematicCharacterController.cpp 2015-03-26 13:15:36.992897379 -0500
3 +++ bullet.new/src/BulletDynamics/Character/btKinematicCharacterController.cpp 2015-03-26 01:38:09.802905314 -0500
5 //manifold->clearManifold();
8 - btTransform newTrans = m_ghostObject->getWorldTransform();
9 - newTrans.setOrigin(m_currentPosition);
10 - m_ghostObject->setWorldTransform(newTrans);
11 -// printf("m_touchingNormal = %f,%f,%f\n",m_touchingNormal[0],m_touchingNormal[1],m_touchingNormal[2]);
12 + if (penetration == true)
14 + btTransform newTrans = m_ghostObject->getWorldTransform();
15 + newTrans.setOrigin(m_currentPosition);
16 + m_ghostObject->setWorldTransform(newTrans);
17 + //printf("m_touchingNormal = %f,%f,%f\n",m_touchingNormal[0],m_touchingNormal[1],m_touchingNormal[2]);
23 btScalar distance2 = (m_currentPosition-m_targetPosition).length2();
24 // printf("distance2=%f\n",distance2);
26 - if (m_touchingContact)
27 + /*if (m_touchingContact)
29 if (m_normalizedDirection.dot(m_touchingNormal) > btScalar(0.0))
31 //interferes with step movement
32 - //updateTargetPositionBasedOnCollision (m_touchingNormal);
33 + updateTargetPositionBasedOnCollision (m_touchingNormal);
40 + doPenetrationRecovery(collisionWorld);
42 while (fraction > btScalar(0.01) && maxIter-- > 0)
44 start.setOrigin (m_currentPosition);
46 void btKinematicCharacterController::preStep ( btCollisionWorld* collisionWorld)
49 - int numPenetrationLoops = 0;
50 - m_touchingContact = false;
51 - while (recoverFromPenetration (collisionWorld))
53 - numPenetrationLoops++;
54 - m_touchingContact = true;
55 - if (numPenetrationLoops > 4)
57 - //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
62 m_currentPosition = m_ghostObject->getWorldTransform().getOrigin();
63 m_targetPosition = m_currentPosition;
64 // printf("m_targetPosition=%f,%f,%f\n",m_targetPosition[0],m_targetPosition[1],m_targetPosition[2]);
72 m_interpolateUp = value;
75 +void btKinematicCharacterController::doPenetrationRecovery(btCollisionWorld* collisionWorld)
77 + int numPenetrationLoops = 0;
78 + m_touchingContact = false;
80 + while (recoverFromPenetration (collisionWorld))
82 + numPenetrationLoops++;
83 + m_touchingContact = true;
84 + if (numPenetrationLoops > 4)
86 + //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
91 diff -urN bullet.orig/src/BulletDynamics/Character/btKinematicCharacterController.h bullet.new/src/BulletDynamics/Character/btKinematicCharacterController.h
92 --- bullet.orig/src/BulletDynamics/Character/btKinematicCharacterController.h 2015-03-26 13:15:36.992897379 -0500
93 +++ bullet.new/src/BulletDynamics/Character/btKinematicCharacterController.h 2015-03-26 01:23:54.895928312 -0500
95 void updateTargetPositionBasedOnCollision (const btVector3& hit_normal, btScalar tangentMag = btScalar(0.0), btScalar normalMag = btScalar(1.0));
96 void stepForwardAndStrafe (btCollisionWorld* collisionWorld, const btVector3& walkMove);
97 void stepDown (btCollisionWorld* collisionWorld, btScalar dt);
98 + void doPenetrationRecovery(btCollisionWorld* collisionWorld);
101 BT_DECLARE_ALIGNED_ALLOCATOR();