Browse Source

bullet: restore behavior of in_contact flag

c18abad8c3373aff134dd02d099d476d094b0b69 added a call that resets the m_isInContact flag, so this resets it, for better or worse.  We may want to revisit whether #349 was indeed the right fix to #250.

Fixes #453
rdb 7 years ago
parent
commit
b38faadf5f
1 changed files with 6 additions and 3 deletions
  1. 6 3
      panda/src/bullet/bulletVehicle.cxx

+ 6 - 3
panda/src/bullet/bulletVehicle.cxx

@@ -235,10 +235,13 @@ void BulletVehicle::
 do_sync_b2p() {
 do_sync_b2p() {
 
 
   for (int i=0; i < _vehicle->getNumWheels(); i++) {
   for (int i=0; i < _vehicle->getNumWheels(); i++) {
-    // synchronize the wheels with the (interpolated) chassis worldtransform
-    _vehicle->updateWheelTransform(i, true);
+    btWheelInfo &info = _vehicle->getWheelInfo(i);
 
 
-    btWheelInfo info = _vehicle->getWheelInfo(i);
+    // synchronize the wheels with the (interpolated) chassis worldtransform.
+    // It resets the m_isInContact flag, so restore that afterwards.
+    bool in_contact = info.m_raycastInfo.m_isInContact;
+    _vehicle->updateWheelTransform(i, true);
+    info.m_raycastInfo.m_isInContact = in_contact;
 
 
     PandaNode *node = (PandaNode *)info.m_clientInfo;
     PandaNode *node = (PandaNode *)info.m_clientInfo;
     if (node) {
     if (node) {