Revision: 16007
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16007
Author:   ben2610
Date:     2008-08-07 19:29:06 +0200 (Thu, 07 Aug 2008)

Log Message:
-----------
BGE bug #17408 fixed: Radar sensor is oriented the wrong way when the set along 
negative axis. Improve reliability of Radar detection by clearing the manifold 
cache instead of updating it.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp
    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp

Modified: trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp   2008-08-07 
17:27:29 UTC (rev 16006)
+++ trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp   2008-08-07 
17:29:06 UTC (rev 16007)
@@ -147,23 +147,23 @@
                };
        case 3: // -X Axis
                {
-                       MT_Quaternion 
rotquatje(MT_Vector3(0,0,1),MT_radians(90));
+                       MT_Quaternion 
rotquatje(MT_Vector3(0,0,1),MT_radians(-90));
                        trans.rotate(rotquatje);
-                       trans.translate(MT_Vector3 (0, m_coneheight/2.0 ,0));
+                       trans.translate(MT_Vector3 (0, -m_coneheight/2.0 ,0));
                        break;
                };
        case 4: // -Y Axis
                {
-                       MT_Quaternion 
rotquatje(MT_Vector3(1,0,0),MT_radians(-180));
-                       trans.rotate(rotquatje);
-                       trans.translate(MT_Vector3 (0, m_coneheight/2.0 ,0));
+                       //MT_Quaternion 
rotquatje(MT_Vector3(1,0,0),MT_radians(-180));
+                       //trans.rotate(rotquatje);
+                       trans.translate(MT_Vector3 (0, -m_coneheight/2.0 ,0));
                        break;
                };
        case 5: // -Z Axis
                {
-                       MT_Quaternion 
rotquatje(MT_Vector3(1,0,0),MT_radians(-90));
+                       MT_Quaternion 
rotquatje(MT_Vector3(1,0,0),MT_radians(90));
                        trans.rotate(rotquatje);
-                       trans.translate(MT_Vector3 (0, m_coneheight/2.0 ,0));
+                       trans.translate(MT_Vector3 (0, -m_coneheight/2.0 ,0));
                        break;
                };
        default:

Modified: 
trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
===================================================================
--- trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp    
2008-08-07 17:27:29 UTC (rev 16006)
+++ trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp    
2008-08-07 17:29:06 UTC (rev 16007)
@@ -966,15 +966,6 @@
                        {
                                btRigidBody* rb0 = 
static_cast<btRigidBody*>(manifold->getBody0());
                                btRigidBody* rb1 = 
static_cast<btRigidBody*>(manifold->getBody1());
-                               // Bullet does not refresh the manifold contact 
point for object without contact response
-                               // may need to remove this when a newer Bullet 
version is integrated
-                               if (!dispatcher->needsResponse(rb0, rb1))
-                               {
-                                       
manifold->refreshContactPoints(rb0->getCenterOfMassTransform(),rb1->getCenterOfMassTransform());
-                                       numContacts = 
manifold->getNumContacts();
-                                       if (!numContacts)
-                                               continue;
-                               }
                                if (m_debugDrawer && 
(m_debugDrawer->getDebugMode() & btIDebugDraw::DBG_DrawContactPoints))
                                {
                                        for (int j=0;j<numContacts;j++)
@@ -1003,6 +994,15 @@
                                        
m_triggerCallbacks[PHY_OBJECT_RESPONSE](m_triggerCallbacksUserPtrs[PHY_OBJECT_RESPONSE],
                                                ctrl0,ctrl1,0);
                                }
+                               // Bullet does not refresh the manifold contact 
point for object without contact response
+                               // may need to remove this when a newer Bullet 
version is integrated
+                               if (!dispatcher->needsResponse(rb0, rb1))
+                               {
+                                       // Refresh algorithm fails sometimes 
when there is penetration 
+                                       // (usuall the case with ghost and 
sensor objects)
+                                       // Let's just clear the manifold, in 
any case, it is recomputed on each frame.
+                                       manifold->clearManifold(); 
//refreshContactPoints(rb0->getCenterOfMassTransform(),rb1->getCenterOfMassTransform());
+                               }
                        }
                }
 


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to