OSDN Git Service

Fixed penetration recovery by running it in the forward movement function, right...
[skyscrapersim/skyscraper.git] / bullet-changes.patch
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
4 @@ -234,10 +234,13 @@
5                         //manifold->clearManifold();
6                 }
7         }
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)
13 +       {
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]);
18 +       }
19         return penetration;
20  }
21  
22 @@ -338,17 +341,19 @@
23         btScalar distance2 = (m_currentPosition-m_targetPosition).length2();
24  //     printf("distance2=%f\n",distance2);
25  
26 -       if (m_touchingContact)
27 +       /*if (m_touchingContact)
28         {
29                 if (m_normalizedDirection.dot(m_touchingNormal) > btScalar(0.0))
30                 {
31                         //interferes with step movement
32 -                       //updateTargetPositionBasedOnCollision (m_touchingNormal);
33 +                       updateTargetPositionBasedOnCollision (m_touchingNormal);
34                 }
35 -       }
36 +       }*/
37  
38         int maxIter = 10;
39  
40 +       doPenetrationRecovery(collisionWorld);
41 +
42         while (fraction > btScalar(0.01) && maxIter-- > 0)
43         {
44                 start.setOrigin (m_currentPosition);
45 @@ -607,24 +612,9 @@
46  void btKinematicCharacterController::preStep (  btCollisionWorld* collisionWorld)
47  {
48         
49 -       int numPenetrationLoops = 0;
50 -       m_touchingContact = false;
51 -       while (recoverFromPenetration (collisionWorld))
52 -       {
53 -               numPenetrationLoops++;
54 -               m_touchingContact = true;
55 -               if (numPenetrationLoops > 4)
56 -               {
57 -                       //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
58 -                       break;
59 -               }
60 -       }
61 -
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]);
65 -
66 -       
67  }
68  
69  #include <stdio.h>
70 @@ -768,3 +758,20 @@
71  {
72         m_interpolateUp = value;
73  }
74 +
75 +void btKinematicCharacterController::doPenetrationRecovery(btCollisionWorld* collisionWorld)
76 +{
77 +       int numPenetrationLoops = 0;
78 +       m_touchingContact = false;
79 +
80 +       while (recoverFromPenetration (collisionWorld))
81 +       {
82 +               numPenetrationLoops++;
83 +               m_touchingContact = true;
84 +               if (numPenetrationLoops > 4)
85 +               {
86 +                       //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
87 +                       break;
88 +               }
89 +       }
90 +}
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
94 @@ -94,6 +94,7 @@
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);
99  public:
100  
101         BT_DECLARE_ALIGNED_ALLOCATOR();