OSDN Git Service

Added GotoFloor teleport command
[skyscrapersim/skyscraper.git] / bullet-changes.patch
index 96ffc2e..0fcaee8 100644 (file)
-diff -urN a/src/BulletDynamics/Character/btKinematicCharacterController.cpp b/src/BulletDynamics/Character/btKinematicCharacterController.cpp
---- a/src/BulletDynamics/Character/btKinematicCharacterController.cpp  2014-01-10 15:47:47.572520001 -0600
-+++ b/src/BulletDynamics/Character/btKinematicCharacterController.cpp  2014-01-10 15:48:52.389223177 -0600
-@@ -607,8 +607,11 @@
- void btKinematicCharacterController::preStep (  btCollisionWorld* collisionWorld)
+diff -urN bullet.orig/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp bullet.new/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp
+--- bullet.orig/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp 2014-01-10 15:49:31.000000000 -0600
++++ bullet.new/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp  2015-03-26 20:16:59.766935213 -0500
+@@ -51,7 +51,7 @@
+ m_ignoreMargin(false),
+ m_lastUsedMethod(-1),
+ m_catchDegeneracies(1),
+-m_fixContactNormalDirection(1)
++m_fixContactNormalDirection(0)
+ {
+ }
+ btGjkPairDetector::btGjkPairDetector(const btConvexShape* objectA,const btConvexShape* objectB,int shapeTypeA,int shapeTypeB,btScalar marginA, btScalar marginB, btSimplexSolverInterface* simplexSolver,btConvexPenetrationDepthSolver*      penetrationDepthSolver)
+@@ -67,7 +67,7 @@
+ m_ignoreMargin(false),
+ m_lastUsedMethod(-1),
+ m_catchDegeneracies(1),
+-m_fixContactNormalDirection(1)
++m_fixContactNormalDirection(0)
  {
+ }
+diff -urN bullet.orig/src/BulletDynamics/Character/btKinematicCharacterController.cpp bullet.new/src/BulletDynamics/Character/btKinematicCharacterController.cpp
+--- bullet.orig/src/BulletDynamics/Character/btKinematicCharacterController.cpp        2015-03-26 13:15:36.992897379 -0500
++++ bullet.new/src/BulletDynamics/Character/btKinematicCharacterController.cpp 2015-12-22 17:59:06.345343465 -0600
+@@ -136,6 +136,7 @@
+        m_upAxis = upAxis;
+        m_addedMargin = 0.02;
+        m_walkDirection.setValue(0,0,0);
++       m_normalizedDirection.setValue(0,0,0);
+        m_useGhostObjectSweepTest = true;
+        m_ghostObject = ghostObject;
+        m_stepHeight = stepHeight;
+@@ -187,7 +188,7 @@
+       collisionWorld->getDispatcher()->dispatchAllCollisionPairs(m_ghostObject->getOverlappingPairCache(), collisionWorld->getDispatchInfo(), collisionWorld->getDispatcher());
+-      m_currentPosition = m_ghostObject->getWorldTransform().getOrigin();
++      //m_currentPosition = m_ghostObject->getWorldTransform().getOrigin();
        
--      int numPenetrationLoops = 0;
-+      //this causes other objects to 'push' character, and is turned off because
-+        //it interferes with stairs stepping
-+      /*int numPenetrationLoops = 0;
-       m_touchingContact = false;
-+
-       while (recoverFromPenetration (collisionWorld))
+       btScalar maxPen = btScalar(0.0);
+       for (int i = 0; i < m_ghostObject->getOverlappingPairCache()->getNumOverlappingPairs(); i++)
+@@ -234,10 +235,13 @@
+                       //manifold->clearManifold();
+               }
+       }
+-      btTransform newTrans = m_ghostObject->getWorldTransform();
+-      newTrans.setOrigin(m_currentPosition);
+-      m_ghostObject->setWorldTransform(newTrans);
+-//    printf("m_touchingNormal = %f,%f,%f\n",m_touchingNormal[0],m_touchingNormal[1],m_touchingNormal[2]);
++      if (penetration == true)
++      {
++              btTransform newTrans = m_ghostObject->getWorldTransform();
++              newTrans.setOrigin(m_currentPosition);
++              m_ghostObject->setWorldTransform(newTrans);
++              //printf("m_touchingNormal = %f,%f,%f\n",m_touchingNormal[0],m_touchingNormal[1],m_touchingNormal[2]);
++      }
+       return penetration;
+ }
+@@ -338,17 +342,19 @@
+       btScalar distance2 = (m_currentPosition-m_targetPosition).length2();
+ //    printf("distance2=%f\n",distance2);
+-      if (m_touchingContact)
++      /*if (m_touchingContact)
        {
-               numPenetrationLoops++;
-@@ -618,7 +621,7 @@
-                       //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
-                       break;
+               if (m_normalizedDirection.dot(m_touchingNormal) > btScalar(0.0))
+               {
+                       //interferes with step movement
+-                      //updateTargetPositionBasedOnCollision (m_touchingNormal);
++                      updateTargetPositionBasedOnCollision (m_touchingNormal);
                }
 -      }
 +      }*/
  
+       int maxIter = 10;
++      doPenetrationRecovery(collisionWorld);
++
+       while (fraction > btScalar(0.01) && maxIter-- > 0)
+       {
+               start.setOrigin (m_currentPosition);
+@@ -607,24 +613,9 @@
+ void btKinematicCharacterController::preStep (  btCollisionWorld* collisionWorld)
+ {
+       
+-      int numPenetrationLoops = 0;
+-      m_touchingContact = false;
+-      while (recoverFromPenetration (collisionWorld))
+-      {
+-              numPenetrationLoops++;
+-              m_touchingContact = true;
+-              if (numPenetrationLoops > 4)
+-              {
+-                      //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
+-                      break;
+-              }
+-      }
+-
        m_currentPosition = m_ghostObject->getWorldTransform().getOrigin();
        m_targetPosition = m_currentPosition;
+ //    printf("m_targetPosition=%f,%f,%f\n",m_targetPosition[0],m_targetPosition[1],m_targetPosition[2]);
+-
+-      
+ }
+ #include <stdio.h>
+@@ -768,3 +759,20 @@
+ {
+       m_interpolateUp = value;
+ }
++
++void btKinematicCharacterController::doPenetrationRecovery(btCollisionWorld* collisionWorld)
++{
++      int numPenetrationLoops = 0;
++      m_touchingContact = false;
++
++      while (recoverFromPenetration (collisionWorld))
++      {
++              numPenetrationLoops++;
++              m_touchingContact = true;
++              if (numPenetrationLoops > 4)
++              {
++                      //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
++                      break;
++              }
++      }
++}
+diff -urN bullet.orig/src/BulletDynamics/Character/btKinematicCharacterController.h bullet.new/src/BulletDynamics/Character/btKinematicCharacterController.h
+--- bullet.orig/src/BulletDynamics/Character/btKinematicCharacterController.h  2015-03-26 13:15:36.992897379 -0500
++++ bullet.new/src/BulletDynamics/Character/btKinematicCharacterController.h   2015-03-26 01:23:54.895928312 -0500
+@@ -94,6 +94,7 @@
+       void updateTargetPositionBasedOnCollision (const btVector3& hit_normal, btScalar tangentMag = btScalar(0.0), btScalar normalMag = btScalar(1.0));
+       void stepForwardAndStrafe (btCollisionWorld* collisionWorld, const btVector3& walkMove);
+       void stepDown (btCollisionWorld* collisionWorld, btScalar dt);
++      void doPenetrationRecovery(btCollisionWorld* collisionWorld);
+ public:
+       BT_DECLARE_ALIGNED_ALLOCATOR();