Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErwin Coumans <blender@erwincoumans.com>2009-06-06 04:12:49 +0400
committerErwin Coumans <blender@erwincoumans.com>2009-06-06 04:12:49 +0400
commit884a6a6573c08d2d0fe7f44994b8a874f45d68f2 (patch)
treec10be5dc6361472c265ce19556cb1349fd80a472 /source/gameengine
parent04ccb0caf847b29542618a903f0e4243270f8c82 (diff)
#18872 bugfix for torque on dynamic objects
#18893, fix to getParam for generic 6dof constraints
Diffstat (limited to 'source/gameengine')
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintWrapper.cpp15
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintWrapper.h1
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.cpp3
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp45
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h3
-rw-r--r--source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h5
-rw-r--r--source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h4
-rw-r--r--source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h1
8 files changed, 72 insertions, 5 deletions
diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
index 3e5594e0d1c..c5cf67af67d 100644
--- a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
@@ -54,6 +54,20 @@ PyObject* KX_ConstraintWrapper::PyGetConstraintId()
return PyInt_FromLong(m_constraintId);
}
+
+PyObject* KX_ConstraintWrapper::PyGetParam(PyObject* args, PyObject* kwds)
+{
+ int dof;
+ float value;
+
+ if (!PyArg_ParseTuple(args,"i:getParam",&dof))
+ return NULL;
+
+ value = m_physenv->getConstraintParam(m_constraintId,dof);
+ return PyFloat_FromDouble(value);
+
+}
+
PyObject* KX_ConstraintWrapper::PySetParam(PyObject* args, PyObject* kwds)
{
int dof;
@@ -119,6 +133,7 @@ int KX_ConstraintWrapper::py_setattro(PyObject *attr,PyObject* value)
PyMethodDef KX_ConstraintWrapper::Methods[] = {
{"getConstraintId",(PyCFunction) KX_ConstraintWrapper::sPyGetConstraintId, METH_NOARGS},
{"setParam",(PyCFunction) KX_ConstraintWrapper::sPySetParam, METH_VARARGS},
+ {"getParam",(PyCFunction) KX_ConstraintWrapper::sPyGetParam, METH_VARARGS},
{NULL,NULL} //Sentinel
};
diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.h b/source/gameengine/Ketsji/KX_ConstraintWrapper.h
index d4f038e2898..03813e0f167 100644
--- a/source/gameengine/Ketsji/KX_ConstraintWrapper.h
+++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.h
@@ -45,6 +45,7 @@ public:
KX_PYMETHOD_NOARGS(KX_ConstraintWrapper,GetConstraintId);
KX_PYMETHOD(KX_ConstraintWrapper,SetParam);
+ KX_PYMETHOD(KX_ConstraintWrapper,GetParam);
private:
int m_constraintId;
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index 3a3c817698b..d22c09b4d3e 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -1019,7 +1019,8 @@ void CcdPhysicsController::ApplyTorque(float torqueX,float torqueY,float torque
//workaround for incompatibility between 'DYNAMIC' game object, and angular factor
//a DYNAMIC object has some inconsistency: it has no angular effect due to collisions, but still has torque
const btVector3& angFac = body->getAngularFactor();
- body->setAngularFactor(1.f);
+ btVector3 tmpFac(0,0,1);
+ body->setAngularFactor(tmpFac);
body->applyTorque(torque);
body->setAngularFactor(angFac);
}
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
index 2dc7bffe618..bc7ccacc39b 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
@@ -1786,6 +1786,45 @@ CcdPhysicsEnvironment::~CcdPhysicsEnvironment()
}
+float CcdPhysicsEnvironment::getConstraintParam(int constraintId,int param)
+{
+ btTypedConstraint* typedConstraint = getConstraintById(constraintId);
+ switch (typedConstraint->getUserConstraintType())
+ {
+ case PHY_GENERIC_6DOF_CONSTRAINT:
+ {
+
+ switch (param)
+ {
+ case 0: case 1: case 2:
+ {
+ //param = 0..2 are linear constraint values
+ btGeneric6DofConstraint* genCons = (btGeneric6DofConstraint*)typedConstraint;
+ genCons->calculateTransforms();
+ return genCons->getRelativePivotPosition(param);
+ break;
+ }
+ case 3: case 4: case 5:
+ {
+ //param = 3..5 are relative constraint (Euler) angles
+ btGeneric6DofConstraint* genCons = (btGeneric6DofConstraint*)typedConstraint;
+ genCons->calculateTransforms();
+ return genCons->getAngle(param-3);
+ break;
+ }
+ default:
+ {
+ }
+ }
+ break;
+ };
+ default:
+ {
+ };
+ };
+ return 0.f;
+}
+
void CcdPhysicsEnvironment::setConstraintParam(int constraintId,int param,float value0,float value1)
{
btTypedConstraint* typedConstraint = getConstraintById(constraintId);
@@ -1835,11 +1874,9 @@ void CcdPhysicsEnvironment::setConstraintParam(int constraintId,int param,float
{
bool springEnabled = true;
genCons->setStiffness(springIndex,value0);
+ genCons->setDamping(springIndex,value1);
genCons->enableSpring(springIndex,springEnabled);
- if (value1>0.5f)
- {
- genCons->setEquilibriumPoint(springIndex);
- }
+ genCons->setEquilibriumPoint(springIndex);
} else
{
bool springEnabled = false;
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
index 4e39d531cd6..bc5491e00cc 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
@@ -149,7 +149,10 @@ protected:
const btVector3& angularMaxLimits,int flags
);
+
virtual void setConstraintParam(int constraintId,int param,float value,float value1);
+
+ virtual float getConstraintParam(int constraintId,int param);
virtual void removeConstraint(int constraintid);
diff --git a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
index 73e7e947355..8dbd137f9de 100644
--- a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
@@ -88,6 +88,11 @@ public:
{
}
+ virtual float getConstraintParam(int constraintId,int param)
+ {
+ return 0.f;
+ }
+
};
#endif //_DUMMYPHYSICSENVIRONMENT
diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
index 4c9d59e3673..5ae33eb4b0e 100644
--- a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
@@ -88,6 +88,10 @@ public:
virtual PHY_IPhysicsController* CreateSphereController(float radius,const PHY__Vector3& position);
virtual PHY_IPhysicsController* CreateConeController(float coneradius,float coneheight);
+ virtual float getConstraintParam(int constraintId,int param)
+ {
+ return 0.f;
+ }
virtual void setConstraintParam(int constraintId,int param,float value,float value1)
{
}
diff --git a/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h b/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
index 1939083ef5f..c76e9d175ce 100644
--- a/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
+++ b/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
@@ -159,6 +159,7 @@ class PHY_IPhysicsEnvironment
virtual PHY_IPhysicsController* CreateConeController(float coneradius,float coneheight)=0;
virtual void setConstraintParam(int constraintId,int param,float value,float value1) = 0;
+ virtual float getConstraintParam(int constraintId,int param) = 0;
};
#endif //_IPHYSICSENVIRONMENT