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

This commit is contained in:
Benoit Bolsee 2008-05-06 20:55:55 +00:00
parent 917865b504
commit 881802d8a3
3 changed files with 33 additions and 9 deletions

@ -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_Vector3 velocity(0.0,0.0,0.0);
MT_Matrix3x3 ori, locvel;
int i, j;
if (m_pPhysicsController1) if (m_pPhysicsController1)
{ {
velocity = m_pPhysicsController1->GetLinearVelocity(); 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) PyObject* kwds)
{ {
// only can get the velocity if we have a physics object connected to us... // 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;
}
} }

@ -252,8 +252,9 @@ public:
/** /**
* Return the linear velocity of the game object. * Return the linear velocity of the game object.
*/ */
MT_Vector3 MT_Vector3
GetLinearVelocity( GetLinearVelocity(
bool local=false
); );
/** /**

@ -58,15 +58,16 @@ class KX_GameObject:
@rtype: 3x3 rotation matrix @rtype: 3x3 rotation matrix
@return: The game object's rotation matrix @return: The game object's rotation matrix
""" """
def getLinearVelocity(): def getLinearVelocity(local):
""" """
Gets the game object's linear velocity. Gets the game object's linear velocity.
This method returns the game object's velocity through it's centre of mass, This method returns the game object's velocity through it's centre of mass,
ie no angular velocity component. 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] @rtype: list [vx, vy, vz]
@return: the object's linear velocity. @return: the object's linear velocity.
""" """
@ -138,6 +139,9 @@ class KX_GameObject:
def setParent(parent): def setParent(parent):
""" """
Sets this object's parent. Sets this object's parent.
@type parent: L{KX_GameObject}
@param parent: new parent object.
""" """
def removeParent(): def removeParent():
""" """