forked from bartvdbraak/blender
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:
parent
917865b504
commit
881802d8a3
@ -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():
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user