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:
-rw-r--r--source/gameengine/Ketsji/KX_BulletPhysicsController.cpp5
-rw-r--r--source/gameengine/Ketsji/KX_BulletPhysicsController.h2
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.cpp24
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.h1
-rw-r--r--source/gameengine/Ketsji/KX_IPhysicsController.h1
-rw-r--r--source/gameengine/Ketsji/KX_SumoPhysicsController.cpp5
-rw-r--r--source/gameengine/Ketsji/KX_SumoPhysicsController.h2
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.cpp22
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.h4
9 files changed, 62 insertions, 4 deletions
diff --git a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
index e0ec09ffdd5..c974b9b6828 100644
--- a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
+++ b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
@@ -15,6 +15,7 @@
#include "PHY_IPhysicsEnvironment.h"
+
KX_BulletPhysicsController::KX_BulletPhysicsController (const CcdConstructionInfo& ci, bool dyna)
: KX_IPhysicsController(dyna,(PHY_IPhysicsController*)this),
CcdPhysicsController(ci)
@@ -58,6 +59,10 @@ void KX_BulletPhysicsController::SetObject (SG_IObject* object)
}
+void KX_BulletPhysicsController::SetMargin (float collisionMargin)
+{
+ CcdPhysicsController::SetMargin(collisionMargin);
+}
void KX_BulletPhysicsController::RelativeTranslate(const MT_Vector3& dloc,bool local)
{
CcdPhysicsController::RelativeTranslate(dloc[0],dloc[1],dloc[2],local);
diff --git a/source/gameengine/Ketsji/KX_BulletPhysicsController.h b/source/gameengine/Ketsji/KX_BulletPhysicsController.h
index 2251c3b1f90..272868459d0 100644
--- a/source/gameengine/Ketsji/KX_BulletPhysicsController.h
+++ b/source/gameengine/Ketsji/KX_BulletPhysicsController.h
@@ -19,7 +19,7 @@ public:
virtual void applyImpulse(const MT_Point3& attach, const MT_Vector3& impulse);
virtual void SetObject (SG_IObject* object);
-
+ virtual void SetMargin (float collisionMargin);
virtual void RelativeTranslate(const MT_Vector3& dloc,bool local);
virtual void RelativeRotate(const MT_Matrix3x3& drot,bool local);
virtual void ApplyTorque(const MT_Vector3& torque,bool local);
diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp
index 3b1e4f7ce59..6e53cb4d25f 100644
--- a/source/gameengine/Ketsji/KX_GameObject.cpp
+++ b/source/gameengine/Ketsji/KX_GameObject.cpp
@@ -627,6 +627,7 @@ PyMethodDef KX_GameObject::Methods[] = {
{"getMass", (PyCFunction) KX_GameObject::sPyGetMass, METH_VARARGS},
{"getReactionForce", (PyCFunction) KX_GameObject::sPyGetReactionForce, METH_VARARGS},
{"applyImpulse", (PyCFunction) KX_GameObject::sPyApplyImpulse, METH_VARARGS},
+ {"setCollisionMargin", (PyCFunction) KX_GameObject::sPySetCollisionMargin, METH_VARARGS},
{"suspendDynamics", (PyCFunction)KX_GameObject::sPySuspendDynamics,METH_VARARGS},
{"restoreDynamics", (PyCFunction)KX_GameObject::sPyRestoreDynamics,METH_VARARGS},
{"enableRigidBody", (PyCFunction)KX_GameObject::sPyEnableRigidBody,METH_VARARGS},
@@ -979,6 +980,29 @@ PyObject* KX_GameObject::PyGetMesh(PyObject* self,
}
+
+
+
+PyObject* KX_GameObject::PySetCollisionMargin(PyObject* self,
+ PyObject* args,
+ PyObject* kwds)
+{
+ float collisionMargin;
+ if (PyArg_ParseTuple(args, "f", &collisionMargin))
+ {
+ if (m_pPhysicsController1)
+ {
+ m_pPhysicsController1->SetMargin(collisionMargin);
+ Py_Return;
+ }
+
+ }
+
+ return NULL;
+}
+
+
+
PyObject* KX_GameObject::PyApplyImpulse(PyObject* self,
PyObject* args,
PyObject* kwds)
diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h
index 0b65109cb8d..f3bf529a37d 100644
--- a/source/gameengine/Ketsji/KX_GameObject.h
+++ b/source/gameengine/Ketsji/KX_GameObject.h
@@ -604,6 +604,7 @@ public:
KX_PYMETHOD(KX_GameObject,EnableRigidBody);
KX_PYMETHOD(KX_GameObject,DisableRigidBody);
KX_PYMETHOD(KX_GameObject,ApplyImpulse);
+ KX_PYMETHOD(KX_GameObject,SetCollisionMargin);
KX_PYMETHOD(KX_GameObject,GetMesh);
KX_PYMETHOD(KX_GameObject,GetParent);
KX_PYMETHOD(KX_GameObject,GetPhysicsId);
diff --git a/source/gameengine/Ketsji/KX_IPhysicsController.h b/source/gameengine/Ketsji/KX_IPhysicsController.h
index ca64888fd55..9a64be7f99c 100644
--- a/source/gameengine/Ketsji/KX_IPhysicsController.h
+++ b/source/gameengine/Ketsji/KX_IPhysicsController.h
@@ -60,6 +60,7 @@ public:
virtual void applyImpulse(const MT_Point3& attach, const MT_Vector3& impulse)=0;
virtual void SetObject (SG_IObject* object)=0;
+ virtual void SetMargin (float collisionMargin)=0;
virtual void RelativeTranslate(const MT_Vector3& dloc,bool local)=0;
virtual void RelativeRotate(const MT_Matrix3x3& drot,bool local)=0;
diff --git a/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp b/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
index 11a09a12e1e..d042a302eda 100644
--- a/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
+++ b/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
@@ -164,6 +164,11 @@ gameobj->SetPhysicsController(this,gameobj->IsDynamic());
GetSumoObject()->setClientObject(gameobj->getClientInfo());
}
+void KX_SumoPhysicsController::SetMargin(float collisionMargin)
+{
+ SumoPhysicsController::SetMargin(collisionMargin);
+}
+
void KX_SumoPhysicsController::setOrientation(const MT_Quaternion& orn)
{
diff --git a/source/gameengine/Ketsji/KX_SumoPhysicsController.h b/source/gameengine/Ketsji/KX_SumoPhysicsController.h
index b4b0f8a4cd0..ea803d964c8 100644
--- a/source/gameengine/Ketsji/KX_SumoPhysicsController.h
+++ b/source/gameengine/Ketsji/KX_SumoPhysicsController.h
@@ -64,7 +64,7 @@ public:
void applyImpulse(const MT_Point3& attach, const MT_Vector3& impulse);
virtual void SetObject (SG_IObject* object);
-
+ virtual void SetMargin (float collisionMargin);
void RelativeTranslate(const MT_Vector3& dloc,bool local);
void RelativeRotate(const MT_Matrix3x3& drot,bool local);
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index cddc780aff4..60b8dbbf862 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -210,6 +210,28 @@ void CcdPhysicsController::PostProcessReplica(class PHY_IMotionState* motionsta
}
+void CcdPhysicsController::SetMargin(float margin)
+{
+ if (m_body && m_body->GetCollisionShape())
+ {
+ m_body->GetCollisionShape()->SetMargin(margin);
+ }
+
+
+}
+
+float CcdPhysicsController::GetMargin() const
+{
+ if (m_body && m_body->GetCollisionShape())
+ {
+ return m_body->GetCollisionShape()->GetMargin();
+ }
+
+ return 0.f;
+
+}
+
+
// kinematic methods
void CcdPhysicsController::RelativeTranslate(float dlocX,float dlocY,float dlocZ,bool local)
{
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
index 056feba652c..7488e74db01 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
@@ -160,8 +160,8 @@ class CcdPhysicsController : public PHY_IPhysicsController
virtual void calcXform() {} ;
- virtual void SetMargin(float margin) {};
- virtual float GetMargin() const {return 0.f;};
+ virtual void SetMargin(float margin);
+ virtual float GetMargin() const;
bool wantsSleeping();