Revision: 16862
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16862
Author:   ben2610
Date:     2008-10-01 09:55:02 +0200 (Wed, 01 Oct 2008)

Log Message:
-----------
BGE bug #17688 fixed: Near Sensor Reset not working (for Gamekit)

Implementation of the PHY_IPhysicsController::SetMargin(),
GetMargin(), SetRadius() and GetRadius() for Bullet and Sumo
to allow resetting the Near sensor radius. For bullet use 
the new setUnscaledRadius() function to change sphere radius.

In pPreparation of a Fh constraint actuator:
- Add KX_IPhysicsController::GetRadius()
- Fix implementation of KX_BulletPhysicsController::GetVelocity()
  (velocity at a point in geometric coordinate)
- Don't try to set velocity on static object (Bullet will assert)
- Add KX_GameObject::GetVelocity() for C access to local velocity

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
    trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/Ketsji/KX_IPhysicsController.h
    trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.cpp
    trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.h
    trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.h
    trunk/blender/source/gameengine/Physics/BlOde/OdePhysicsController.h
    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.h
    trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.h
    trunk/blender/source/gameengine/Physics/common/PHY_IPhysicsController.h

Modified: trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp       
2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp       
2008-10-01 07:55:02 UTC (rev 16862)
@@ -115,7 +115,7 @@
 MT_Vector3 KX_BulletPhysicsController::GetVelocity(const MT_Point3& pos)
 {
        float linVel[3];
-       CcdPhysicsController::GetLinearVelocity(linVel[0],linVel[1],linVel[2]);
+       CcdPhysicsController::GetVelocity(pos[0], pos[1], pos[2], 
linVel[0],linVel[1],linVel[2]);
        return MT_Vector3(linVel[0],linVel[1],linVel[2]);
 }
 
@@ -160,6 +160,12 @@
        return 0.f;
 
 }
+
+MT_Scalar KX_BulletPhysicsController::GetRadius()
+{
+       return MT_Scalar(CcdPhysicsController::GetRadius());
+}
+
 MT_Vector3     KX_BulletPhysicsController::getReactionForce()
 {
        assert(0);

Modified: trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h 
2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h 
2008-10-01 07:55:02 UTC (rev 16862)
@@ -49,9 +49,7 @@
 
        virtual SG_Controller*  GetReplica(class SG_Node* destnode);
 
-       void    SetDyna(bool isDynamic) {
-               m_bDyna = isDynamic;
-       }
+       virtual MT_Scalar GetRadius();
 
 
        virtual void    SetSumoTransform(bool nondynaonly);

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp    2008-10-01 
07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp    2008-10-01 
07:55:02 UTC (rev 16862)
@@ -772,8 +772,15 @@
        return velocity;        
 }
 
+MT_Vector3 KX_GameObject::GetVelocity(const MT_Point3& point)
+{
+       if (m_pPhysicsController1)
+       {
+               return m_pPhysicsController1->GetVelocity(point);
+       }
+       return MT_Vector3(0.0,0.0,0.0);
+}
 
-
 // scenegraph node stuff
 
 void KX_GameObject::NodeSetLocalPosition(const MT_Point3& trans)

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.h      2008-10-01 
07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.h      2008-10-01 
07:55:02 UTC (rev 16862)
@@ -264,6 +264,15 @@
                bool local=false
        );
 
+       /** 
+        * Return the linear velocity of a given point in world coordinate
+        * but relative to center of object ([0,0,0]=center of object)
+        */
+               MT_Vector3 
+       GetVelocity(
+               const MT_Point3& position
+       );
+
        /**
         * Return the mass of the object
         */

Modified: trunk/blender/source/gameengine/Ketsji/KX_IPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_IPhysicsController.h      
2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_IPhysicsController.h      
2008-10-01 07:55:02 UTC (rev 16862)
@@ -88,7 +88,11 @@
                m_bDyna = isDynamic;
        }
 
+       bool    IsDyna(void) {
+               return m_bDyna;
+       }
 
+       virtual MT_Scalar GetRadius()=0;
        virtual void    SetSumoTransform(bool nondynaonly)=0;
        // todo: remove next line !
        virtual void    SetSimulatedTime(double time)=0;

Modified: trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp    2008-10-01 
07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp    2008-10-01 
07:55:02 UTC (rev 16862)
@@ -190,13 +190,13 @@
                {
                        if (m_physCtrl)
                        {
-                               m_physCtrl->SetMargin(m_ResetMargin);
+                               m_physCtrl->SetRadius(m_ResetMargin);
                        }
                } else
                {
                        if (m_physCtrl)
                        {
-                               m_physCtrl->SetMargin(m_Margin);
+                               m_physCtrl->SetRadius(m_Margin);
                        }
 
                }

Modified: trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.cpp  
2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.cpp  
2008-10-01 07:55:02 UTC (rev 16862)
@@ -169,6 +169,11 @@
        return ODEPhysicsController::getMass();
 }
 
+MT_Scalar      KX_OdePhysicsController::GetRadius()
+{
+       return MT_Scalar(0.f);
+}
+
 MT_Vector3     KX_OdePhysicsController::getReactionForce()
 {
        return MT_Vector3(0,0,0);

Modified: trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.h    
2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.h    
2008-10-01 07:55:02 UTC (rev 16862)
@@ -76,7 +76,7 @@
 
        virtual void    SuspendDynamics(bool);
        virtual void    RestoreDynamics();
-       
+       virtual MT_Scalar GetRadius();
 
        virtual SG_Controller*  GetReplica(class SG_Node* destnode);
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp 
2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp 
2008-10-01 07:55:02 UTC (rev 16862)
@@ -205,6 +205,11 @@
        return SumoPhysicsController::getMass();
 }
 
+MT_Scalar      KX_SumoPhysicsController::GetRadius()
+{
+       return SumoPhysicsController::GetRadius();
+}
+
 MT_Vector3     KX_SumoPhysicsController::getReactionForce()
 {
        float force[3];

Modified: trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.h   
2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.h   
2008-10-01 07:55:02 UTC (rev 16862)
@@ -84,6 +84,7 @@
        virtual void setPosition(const MT_Point3& pos);
        virtual void setScaling(const MT_Vector3& scaling);
        virtual MT_Scalar       GetMass();
+       virtual MT_Scalar       GetRadius();
        virtual MT_Vector3      getReactionForce();
        virtual void    setRigidBody(bool rigid);
        

Modified: trunk/blender/source/gameengine/Physics/BlOde/OdePhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Physics/BlOde/OdePhysicsController.h        
2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Physics/BlOde/OdePhysicsController.h        
2008-10-01 07:55:02 UTC (rev 16862)
@@ -111,6 +111,8 @@
        virtual void    calcXform(){}
        virtual void SetMargin(float margin) {}
        virtual float GetMargin() const {return 0.f;}
+       virtual float GetRadius() const {return 0.f;}
+       virtual void  SetRadius(float margin) {}
 
                // clientinfo for raycasts for example
        virtual void*                           getNewClientInfo() { return 
m_clientInfo;}

Modified: 
trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp     
2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp     
2008-10-01 07:55:02 UTC (rev 16862)
@@ -980,7 +980,7 @@
                if (m_object->isStaticObject())
                {
                        
m_object->setCollisionFlags(m_object->getCollisionFlags() | 
btCollisionObject::CF_KINEMATIC_OBJECT);
-               }
+               } else
                {
                        btTransform xform = m_object->getWorldTransform();
                        if (local)
@@ -1005,6 +1005,7 @@
                if (m_object->isStaticObject())
                {
                        
m_object->setCollisionFlags(m_object->getCollisionFlags() | 
btCollisionObject::CF_KINEMATIC_OBJECT);
+                       return;
                }
                
                btSoftBody* soft = GetSoftBody();
@@ -1093,7 +1094,6 @@
        btRigidBody* body = GetRigidBody();
        if (body)
        {
-               btVector3 rel_pos = pos-body->getCenterOfMassPosition();
                btVector3 linvel = body->getVelocityInLocalPoint(rel_pos);
                linvX = linvel.x();
                linvY = linvel.y();

Modified: trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.h       
2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.h       
2008-10-01 07:55:02 UTC (rev 16862)
@@ -413,8 +413,29 @@
                }
 
                virtual void    calcXform() {} ;
-               virtual void SetMargin(float margin) {};
-               virtual float GetMargin() const {return 0.f;};
+               virtual void SetMargin(float margin) 
+               {
+                       if (m_collisionShape)
+                               m_collisionShape->setMargin(btScalar(margin));
+               }
+               virtual float GetMargin() const 
+               {
+                       return (m_collisionShape) ? 
m_collisionShape->getMargin() : 0.f;
+               }
+               virtual float GetRadius() const 
+               { 
+                       // this is not the actual shape radius, it's only used 
for Fh support
+                       return m_cci.m_radius;
+               }
+               virtual void  SetRadius(float margin) 
+               {
+                       if (m_collisionShape && 
m_collisionShape->getShapeType() == SPHERE_SHAPE_PROXYTYPE)
+                       {
+                               btSphereShape* sphereShape = 
static_cast<btSphereShape*>(m_collisionShape);
+                               sphereShape->setUnscaledRadius(margin);
+                       }
+                       m_cci.m_radius = margin;
+               }
 
 
                bool    wantsSleeping();

Modified: trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.h        
2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.h        
2008-10-01 07:55:02 UTC (rev 16862)
@@ -120,6 +120,7 @@
        virtual void SetMargin(float margin) ;
        virtual float GetMargin() const;
        virtual float GetRadius() const ;
+       virtual void  SetRadius(float margin) { SetMargin(margin); }
 
 
        // clientinfo for raycasts for example

Modified: 
trunk/blender/source/gameengine/Physics/common/PHY_IPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Physics/common/PHY_IPhysicsController.h     
2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Physics/common/PHY_IPhysicsController.h     
2008-10-01 07:55:02 UTC (rev 16862)
@@ -90,7 +90,8 @@
                virtual void    calcXform() =0;

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to