Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenoit Bolsee <benoit.bolsee@online.be>2008-05-07 00:55:55 +0400
committerBenoit Bolsee <benoit.bolsee@online.be>2008-05-07 00:55:55 +0400
commit881802d8a385228a3b8af3b1b7ccb8512c96490b (patch)
tree8e135fc24150735428fcf1547d6ac174dad70fb0
parent917865b5049acaa2e13b7d40ebf879121c7e2148 (diff)
BGE patch #10492 approved: getLinearVelocity() now can provide local velocity as well. This patch is harmless and backward compatible; it can go safely into 2.46 release
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.cpp29
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.h3
-rw-r--r--source/gameengine/PyDoc/KX_GameObject.py10
3 files changed, 33 insertions, 9 deletions
diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp
index 4c6ba448ebf..fb636b23082 100644
--- a/source/gameengine/Ketsji/KX_GameObject.cpp
+++ b/source/gameengine/Ketsji/KX_GameObject.cpp
@@ -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;
+ }
}
diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h
index da0cd69e129..b83d63e26bf 100644
--- a/source/gameengine/Ketsji/KX_GameObject.h
+++ b/source/gameengine/Ketsji/KX_GameObject.h
@@ -252,8 +252,9 @@ public:
/**
* Return the linear velocity of the game object.
*/
- MT_Vector3
+ MT_Vector3
GetLinearVelocity(
+ bool local=false
);
/**
diff --git a/source/gameengine/PyDoc/KX_GameObject.py b/source/gameengine/PyDoc/KX_GameObject.py
index 31c9993e194..8ef82b4943b 100644
--- a/source/gameengine/PyDoc/KX_GameObject.py
+++ b/source/gameengine/PyDoc/KX_GameObject.py
@@ -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():
"""