[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16862] trunk/blender/source/gameengine: BGE bug #17688 fixed: Near Sensor Reset not working (for Gamekit)

Benoit Bolsee benoit.bolsee at online.be
Wed Oct 1 09:55:03 CEST 2008


Revision: 16862
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16862
Author:   ben2610
Date:     2008-10-01 09:55:02 +0200 (Wed, 01 Oct 2008)

Log Message:
-----------
BGE bug #17688 fixed: Near Sensor Reset not working (for Gamekit)

Implementation of the PHY_IPhysicsController::SetMargin(),
GetMargin(), SetRadius() and GetRadius() for Bullet and Sumo
to allow resetting the Near sensor radius. For bullet use 
the new setUnscaledRadius() function to change sphere radius.

In pPreparation of a Fh constraint actuator:
- Add KX_IPhysicsController::GetRadius()
- Fix implementation of KX_BulletPhysicsController::GetVelocity()
  (velocity at a point in geometric coordinate)
- Don't try to set velocity on static object (Bullet will assert)
- Add KX_GameObject::GetVelocity() for C access to local velocity

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
    trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/Ketsji/KX_IPhysicsController.h
    trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.cpp
    trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.h
    trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.h
    trunk/blender/source/gameengine/Physics/BlOde/OdePhysicsController.h
    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.h
    trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.h
    trunk/blender/source/gameengine/Physics/common/PHY_IPhysicsController.h

Modified: trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp	2008-10-01 07:55:02 UTC (rev 16862)
@@ -115,7 +115,7 @@
 MT_Vector3 KX_BulletPhysicsController::GetVelocity(const MT_Point3& pos)
 {
 	float linVel[3];
-	CcdPhysicsController::GetLinearVelocity(linVel[0],linVel[1],linVel[2]);
+	CcdPhysicsController::GetVelocity(pos[0], pos[1], pos[2], linVel[0],linVel[1],linVel[2]);
 	return MT_Vector3(linVel[0],linVel[1],linVel[2]);
 }
 
@@ -160,6 +160,12 @@
 	return 0.f;
 
 }
+
+MT_Scalar KX_BulletPhysicsController::GetRadius()
+{
+	return MT_Scalar(CcdPhysicsController::GetRadius());
+}
+
 MT_Vector3	KX_BulletPhysicsController::getReactionForce()
 {
 	assert(0);

Modified: trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h	2008-10-01 07:55:02 UTC (rev 16862)
@@ -49,9 +49,7 @@
 
 	virtual	SG_Controller*	GetReplica(class SG_Node* destnode);
 
-	void	SetDyna(bool isDynamic) {
-		m_bDyna = isDynamic;
-	}
+	virtual MT_Scalar GetRadius();
 
 
 	virtual void	SetSumoTransform(bool nondynaonly);

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2008-10-01 07:55:02 UTC (rev 16862)
@@ -772,8 +772,15 @@
 	return velocity;	
 }
 
+MT_Vector3 KX_GameObject::GetVelocity(const MT_Point3& point)
+{
+	if (m_pPhysicsController1)
+	{
+		return m_pPhysicsController1->GetVelocity(point);
+	}
+	return MT_Vector3(0.0,0.0,0.0);
+}
 
-
 // scenegraph node stuff
 
 void KX_GameObject::NodeSetLocalPosition(const MT_Point3& trans)

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.h	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.h	2008-10-01 07:55:02 UTC (rev 16862)
@@ -264,6 +264,15 @@
 		bool local=false
 	);
 
+	/** 
+	 * Return the linear velocity of a given point in world coordinate
+	 * but relative to center of object ([0,0,0]=center of object)
+	 */
+		MT_Vector3 
+	GetVelocity(
+		const MT_Point3& position
+	);
+
 	/**
 	 * Return the mass of the object
 	 */

Modified: trunk/blender/source/gameengine/Ketsji/KX_IPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_IPhysicsController.h	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_IPhysicsController.h	2008-10-01 07:55:02 UTC (rev 16862)
@@ -88,7 +88,11 @@
 		m_bDyna = isDynamic;
 	}
 
+	bool	IsDyna(void) {
+		return m_bDyna;
+	}
 
+	virtual MT_Scalar GetRadius()=0;
 	virtual void	SetSumoTransform(bool nondynaonly)=0;
 	// todo: remove next line !
 	virtual void	SetSimulatedTime(double time)=0;

Modified: trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp	2008-10-01 07:55:02 UTC (rev 16862)
@@ -190,13 +190,13 @@
 		{
 			if (m_physCtrl)
 			{
-				m_physCtrl->SetMargin(m_ResetMargin);
+				m_physCtrl->SetRadius(m_ResetMargin);
 			}
 		} else
 		{
 			if (m_physCtrl)
 			{
-				m_physCtrl->SetMargin(m_Margin);
+				m_physCtrl->SetRadius(m_Margin);
 			}
 
 		}

Modified: trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.cpp	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.cpp	2008-10-01 07:55:02 UTC (rev 16862)
@@ -169,6 +169,11 @@
 	return ODEPhysicsController::getMass();
 }
 
+MT_Scalar	KX_OdePhysicsController::GetRadius()
+{
+	return MT_Scalar(0.f);
+}
+
 MT_Vector3	KX_OdePhysicsController::getReactionForce()
 {
 	return MT_Vector3(0,0,0);

Modified: trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.h	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.h	2008-10-01 07:55:02 UTC (rev 16862)
@@ -76,7 +76,7 @@
 
 	virtual void	SuspendDynamics(bool);
 	virtual void	RestoreDynamics();
-	
+	virtual MT_Scalar GetRadius();
 
 	virtual	SG_Controller*	GetReplica(class SG_Node* destnode);
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp	2008-10-01 07:55:02 UTC (rev 16862)
@@ -205,6 +205,11 @@
 	return SumoPhysicsController::getMass();
 }
 
+MT_Scalar	KX_SumoPhysicsController::GetRadius()
+{
+	return SumoPhysicsController::GetRadius();
+}
+
 MT_Vector3	KX_SumoPhysicsController::getReactionForce()
 {
 	float force[3];

Modified: trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.h	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.h	2008-10-01 07:55:02 UTC (rev 16862)
@@ -84,6 +84,7 @@
 	virtual	void setPosition(const MT_Point3& pos);
 	virtual	void setScaling(const MT_Vector3& scaling);
 	virtual	MT_Scalar	GetMass();
+	virtual	MT_Scalar	GetRadius();
 	virtual	MT_Vector3	getReactionForce();
 	virtual	void	setRigidBody(bool rigid);
 	

Modified: trunk/blender/source/gameengine/Physics/BlOde/OdePhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Physics/BlOde/OdePhysicsController.h	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Physics/BlOde/OdePhysicsController.h	2008-10-01 07:55:02 UTC (rev 16862)
@@ -111,6 +111,8 @@
 	virtual void	calcXform(){}
 	virtual void SetMargin(float margin) {}
 	virtual float GetMargin() const {return 0.f;}
+	virtual float GetRadius() const {return 0.f;}
+	virtual void  SetRadius(float margin) {}
 
 		// clientinfo for raycasts for example
 	virtual	void*				getNewClientInfo() { return m_clientInfo;}

Modified: trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp	2008-10-01 07:55:02 UTC (rev 16862)
@@ -980,7 +980,7 @@
 		if (m_object->isStaticObject())
 		{
 			m_object->setCollisionFlags(m_object->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
-		}
+		} else
 		{
 			btTransform xform = m_object->getWorldTransform();
 			if (local)
@@ -1005,6 +1005,7 @@
 		if (m_object->isStaticObject())
 		{
 			m_object->setCollisionFlags(m_object->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+			return;
 		}
 		
 		btSoftBody* soft = GetSoftBody();
@@ -1093,7 +1094,6 @@
 	btRigidBody* body = GetRigidBody();
 	if (body)
 	{
-		btVector3 rel_pos = pos-body->getCenterOfMassPosition();
 		btVector3 linvel = body->getVelocityInLocalPoint(rel_pos);
 		linvX = linvel.x();
 		linvY = linvel.y();

Modified: trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.h	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.h	2008-10-01 07:55:02 UTC (rev 16862)
@@ -413,8 +413,29 @@
 		}
 
 		virtual void	calcXform() {} ;
-		virtual void SetMargin(float margin) {};
-		virtual float GetMargin() const {return 0.f;};
+		virtual void SetMargin(float margin) 
+		{
+			if (m_collisionShape)
+				m_collisionShape->setMargin(btScalar(margin));
+		}
+		virtual float GetMargin() const 
+		{
+			return (m_collisionShape) ? m_collisionShape->getMargin() : 0.f;
+		}
+		virtual float GetRadius() const 
+		{ 
+			// this is not the actual shape radius, it's only used for Fh support
+			return m_cci.m_radius;
+		}
+		virtual void  SetRadius(float margin) 
+		{
+			if (m_collisionShape && m_collisionShape->getShapeType() == SPHERE_SHAPE_PROXYTYPE)
+			{
+				btSphereShape* sphereShape = static_cast<btSphereShape*>(m_collisionShape);
+				sphereShape->setUnscaledRadius(margin);
+			}
+			m_cci.m_radius = margin;
+		}
 
 
 		bool	wantsSleeping();

Modified: trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.h	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.h	2008-10-01 07:55:02 UTC (rev 16862)
@@ -120,6 +120,7 @@
 	virtual void SetMargin(float margin) ;
 	virtual float GetMargin() const;
 	virtual float GetRadius() const ;
+	virtual void  SetRadius(float margin) { SetMargin(margin); }
 
 
 	// clientinfo for raycasts for example

Modified: trunk/blender/source/gameengine/Physics/common/PHY_IPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Physics/common/PHY_IPhysicsController.h	2008-10-01 07:30:56 UTC (rev 16861)
+++ trunk/blender/source/gameengine/Physics/common/PHY_IPhysicsController.h	2008-10-01 07:55:02 UTC (rev 16862)
@@ -90,7 +90,8 @@
 		virtual void	calcXform() =0;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list