BGE patch #10492 approved: getLinearVelocity() now can provide local velocity as...
authorBenoit Bolsee <benoit.bolsee@online.be>
Tue, 6 May 2008 20:55:55 +0000 (20:55 +0000)
committerBenoit Bolsee <benoit.bolsee@online.be>
Tue, 6 May 2008 20:55:55 +0000 (20:55 +0000)
source/gameengine/Ketsji/KX_GameObject.cpp
source/gameengine/Ketsji/KX_GameObject.h
source/gameengine/PyDoc/KX_GameObject.py

index 4c6ba448ebf8661bb9b469b4cc8d3892d71aaa1d..fb636b230824b9f42bc38382300bd8ac1d192ce6 100644 (file)
@@ -581,16 +581,27 @@ void KX_GameObject::SetObjectColor(const MT_Vector4& rgbavec)
 
 
 
-MT_Vector3 KX_GameObject::GetLinearVelocity()
+MT_Vector3 KX_GameObject::GetLinearVelocity(bool local)
 {
        MT_Vector3 velocity(0.0,0.0,0.0);
-       
+       MT_Matrix3x3 ori, locvel;
+       int i, j; 
        if (m_pPhysicsController1)
        {
                velocity = m_pPhysicsController1->GetLinearVelocity();
+               
+               if (local)
+               {
+                       ori = GetSGNode()->GetWorldOrientation();
+                       
+                       for(i=0; i < 3; i++)
+                               for(j=0; j < 3; j++)
+                                       locvel[i][j]= velocity[i]*ori[i][j];
+                       for(i=0; i < 3; i++)
+                               velocity[i] = locvel[0][i] + locvel[1][i] + locvel[2][i];
+               }
        }
-       return velocity;
-       
+       return velocity;        
 }
 
 
@@ -948,7 +959,15 @@ PyObject* KX_GameObject::PyGetLinearVelocity(PyObject* self,
                                                                                         PyObject* kwds)
 {
        // only can get the velocity if we have a physics object connected to us...
-       return PyObjectFrom(GetLinearVelocity());
+       int local = 0;
+       if (PyArg_ParseTuple(args,"|i",&local))
+       {
+               return PyObjectFrom(GetLinearVelocity((local!=0)));
+       }
+       else
+       {
+               return NULL;
+       }
 }
 
 
index da0cd69e129d05c41353cba54457b627b159c5d5..b83d63e26bfa7d70b47f19f68997a6b630bb0293 100644 (file)
@@ -252,8 +252,9 @@ public:
        /** 
         * Return the linear velocity of the game object.
         */
-               MT_Vector3                      
+               MT_Vector3 
        GetLinearVelocity(
+               bool local=false
        );
 
        /** 
index 31c9993e194f13bc34ea352dddc4fe950716583f..8ef82b4943b3d76e5c00776d51b258c7cdbe84cf 100644 (file)
@@ -58,15 +58,16 @@ class KX_GameObject:
                @rtype: 3x3 rotation matrix
                @return: The game object's rotation matrix
                """
-       def getLinearVelocity():
+       def getLinearVelocity(local):
                """
                Gets the game object's linear velocity.
                
                This method returns the game object's velocity through it's centre of mass,
                ie no angular velocity component.
                
-               cf getVelocity()
-               
+               @type local: boolean
+               @param local: - False: you get the "global" velocity ie: relative to world orientation.
+                             - True: you get the "local" velocity ie: relative to object orientation.
                @rtype: list [vx, vy, vz]
                @return: the object's linear velocity.
                """
@@ -138,6 +139,9 @@ class KX_GameObject:
        def setParent(parent):
                """
                Sets this object's parent.
+               
+               @type parent: L{KX_GameObject}
+               @param parent: new parent object.
                """
        def removeParent():
                """