[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