[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14713] trunk/blender/source/gameengine: BGE patch #10492 approved: getLinearVelocity() now can provide local velocity as well.

Benoit Bolsee benoit.bolsee at online.be
Tue May 6 22:55:55 CEST 2008


Revision: 14713
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14713
Author:   ben2610
Date:     2008-05-06 22:55:55 +0200 (Tue, 06 May 2008)

Log Message:
-----------
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

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/PyDoc/KX_GameObject.py

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2008-05-06 20:52:26 UTC (rev 14712)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2008-05-06 20:55:55 UTC (rev 14713)
@@ -581,16 +581,27 @@
 
 
 
-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* 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;
+	}
 }
 
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.h	2008-05-06 20:52:26 UTC (rev 14712)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.h	2008-05-06 20:55:55 UTC (rev 14713)
@@ -252,8 +252,9 @@
 	/** 
 	 * Return the linear velocity of the game object.
 	 */
-		MT_Vector3			
+		MT_Vector3 
 	GetLinearVelocity(
+		bool local=false
 	);
 
 	/** 

Modified: trunk/blender/source/gameengine/PyDoc/KX_GameObject.py
===================================================================
--- trunk/blender/source/gameengine/PyDoc/KX_GameObject.py	2008-05-06 20:52:26 UTC (rev 14712)
+++ trunk/blender/source/gameengine/PyDoc/KX_GameObject.py	2008-05-06 20:55:55 UTC (rev 14713)
@@ -58,15 +58,16 @@
 		@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 @@
 	def setParent(parent):
 		"""
 		Sets this object's parent.
+		
+		@type parent: L{KX_GameObject}
+		@param parent: new parent object.
 		"""
 	def removeParent():
 		"""





More information about the Bf-blender-cvs mailing list