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:
-rwxr-xr-xextern/bullet/BulletDynamics/Vehicle/RaycastVehicle.cpp2
-rwxr-xr-xextern/bullet/BulletDynamics/Vehicle/WheelInfo.h2
-rw-r--r--source/gameengine/Ketsji/KX_VehicleWrapper.cpp88
-rw-r--r--source/gameengine/Ketsji/KX_VehicleWrapper.h9
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp51
-rw-r--r--source/gameengine/Physics/common/PHY_IVehicle.h11
6 files changed, 160 insertions, 3 deletions
diff --git a/extern/bullet/BulletDynamics/Vehicle/RaycastVehicle.cpp b/extern/bullet/BulletDynamics/Vehicle/RaycastVehicle.cpp
index 2099aa9b880..096ccfd85d2 100755
--- a/extern/bullet/BulletDynamics/Vehicle/RaycastVehicle.cpp
+++ b/extern/bullet/BulletDynamics/Vehicle/RaycastVehicle.cpp
@@ -587,7 +587,7 @@ void RaycastVehicle::UpdateFriction(SimdScalar timeStep)
SimdVector3 sideImp = axle[wheel] * sideImpulse[wheel];
- rel_pos[2] *= 0.1;
+ rel_pos[2] *= wheelInfo.m_rollInfluence;
m_chassisBody->applyImpulse(sideImp,rel_pos);
//apply friction impulse on the ground
diff --git a/extern/bullet/BulletDynamics/Vehicle/WheelInfo.h b/extern/bullet/BulletDynamics/Vehicle/WheelInfo.h
index bd69a634597..61687f58b3a 100755
--- a/extern/bullet/BulletDynamics/Vehicle/WheelInfo.h
+++ b/extern/bullet/BulletDynamics/Vehicle/WheelInfo.h
@@ -67,6 +67,7 @@ struct WheelInfo
SimdScalar m_steering;
SimdScalar m_rotation;
SimdScalar m_deltaRotation;
+ SimdScalar m_rollInfluence;
SimdScalar m_engineForce;
@@ -96,6 +97,7 @@ struct WheelInfo
m_rotation = 0.f;
m_deltaRotation = 0.f;
m_brake = 0.f;
+ m_rollInfluence = 0.1f;
m_bIsFrontWheel = ci.m_bIsFrontWheel;
}
diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
index 9745af028d5..d92742d8799 100644
--- a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
@@ -158,6 +158,81 @@ PyObject* KX_VehicleWrapper::PyApplyEngineForce(PyObject* self,
return Py_None;
}
+PyObject* KX_VehicleWrapper::PySetTyreFriction(PyObject* self,
+ PyObject* args,
+ PyObject* kwds)
+{
+ float wheelFriction;
+ int wheelIndex;
+
+ if (PyArg_ParseTuple(args,"fi",&wheelFriction,&wheelIndex))
+ {
+ m_vehicle->SetWheelFriction(wheelFriction,wheelIndex);
+ }
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+PyObject* KX_VehicleWrapper::PySetSuspensionStiffness(PyObject* self,
+ PyObject* args,
+ PyObject* kwds)
+{
+ float suspensionStiffness;
+ int wheelIndex;
+
+ if (PyArg_ParseTuple(args,"fi",&suspensionStiffness,&wheelIndex))
+ {
+ m_vehicle->SetSuspensionStiffness(suspensionStiffness,wheelIndex);
+ }
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+PyObject* KX_VehicleWrapper::PySetSuspensionDamping(PyObject* self,
+ PyObject* args,
+ PyObject* kwds)
+{
+ float suspensionDamping;
+ int wheelIndex;
+
+ if (PyArg_ParseTuple(args,"fi",&suspensionDamping,&wheelIndex))
+ {
+ m_vehicle->SetSuspensionDamping(suspensionDamping,wheelIndex);
+ }
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+PyObject* KX_VehicleWrapper::PySetSuspensionCompression(PyObject* self,
+ PyObject* args,
+ PyObject* kwds)
+{
+ float suspensionCompression;
+ int wheelIndex;
+
+ if (PyArg_ParseTuple(args,"fi",&suspensionCompression,&wheelIndex))
+ {
+ m_vehicle->SetSuspensionCompression(suspensionCompression,wheelIndex);
+ }
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+PyObject* KX_VehicleWrapper::PySetRollInfluence(PyObject* self,
+ PyObject* args,
+ PyObject* kwds)
+{
+ float rollInfluence;
+ int wheelIndex;
+
+ if (PyArg_ParseTuple(args,"fi",&rollInfluence,&wheelIndex))
+ {
+ m_vehicle->SetRollInfluence(rollInfluence,wheelIndex);
+ }
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
PyObject* KX_VehicleWrapper::PyApplyBraking(PyObject* self,
PyObject* args,
@@ -275,8 +350,17 @@ PyMethodDef KX_VehicleWrapper::Methods[] = {
{"setSteeringValue",(PyCFunction) KX_VehicleWrapper::sPySetSteeringValue, METH_VARARGS},
{"applyEngineForce",(PyCFunction) KX_VehicleWrapper::sPyApplyEngineForce, METH_VARARGS},
{"applyBraking",(PyCFunction) KX_VehicleWrapper::sPyApplyBraking, METH_VARARGS},
- {NULL,NULL} //Sentinel
-};
+ {"setTyreFriction",(PyCFunction) KX_VehicleWrapper::sPySetTyreFriction, METH_VARARGS},
+
+ {"setSuspensionStiffness",(PyCFunction) KX_VehicleWrapper::sPySetSuspensionStiffness, METH_VARARGS},
+
+ {"setSuspensionDamping",(PyCFunction) KX_VehicleWrapper::sPySetSuspensionDamping, METH_VARARGS},
+
+ {"setSuspensionCompression",(PyCFunction) KX_VehicleWrapper::sPySetSuspensionCompression, METH_VARARGS},
+ {"setRollInfluence",(PyCFunction) KX_VehicleWrapper::sPySetRollInfluence, METH_VARARGS},
+
+ {NULL,NULL} //Sentinel
+};
diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.h b/source/gameengine/Ketsji/KX_VehicleWrapper.h
index 22b8f186f4a..b98369d401a 100644
--- a/source/gameengine/Ketsji/KX_VehicleWrapper.h
+++ b/source/gameengine/Ketsji/KX_VehicleWrapper.h
@@ -39,7 +39,16 @@ public:
KX_PYMETHOD(KX_VehicleWrapper,ApplyBraking);
+ KX_PYMETHOD(KX_VehicleWrapper,SetTyreFriction);
+ KX_PYMETHOD(KX_VehicleWrapper,SetSuspensionStiffness);
+
+ KX_PYMETHOD(KX_VehicleWrapper,SetSuspensionDamping);
+
+ KX_PYMETHOD(KX_VehicleWrapper,SetSuspensionCompression);
+
+ KX_PYMETHOD(KX_VehicleWrapper,SetRollInfluence);
+
private:
PHY_IVehicle* m_vehicle;
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
index 9e175bdac27..b39591fc627 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
@@ -197,6 +197,57 @@ public:
}
}
+ virtual void SetWheelFriction(float friction,int wheelIndex)
+ {
+ if ((wheelIndex>=0) && (wheelIndex< m_vehicle->GetNumWheels()))
+ {
+ WheelInfo& info = m_vehicle->GetWheelInfo(wheelIndex);
+ info.m_frictionSlip = friction;
+ }
+
+ }
+
+ virtual void SetSuspensionStiffness(float suspensionStiffness,int wheelIndex)
+ {
+ if ((wheelIndex>=0) && (wheelIndex< m_vehicle->GetNumWheels()))
+ {
+ WheelInfo& info = m_vehicle->GetWheelInfo(wheelIndex);
+ info.m_suspensionStiffness = suspensionStiffness;
+
+ }
+ }
+
+ virtual void SetSuspensionDamping(float suspensionDamping,int wheelIndex)
+ {
+ if ((wheelIndex>=0) && (wheelIndex< m_vehicle->GetNumWheels()))
+ {
+ WheelInfo& info = m_vehicle->GetWheelInfo(wheelIndex);
+ info.m_wheelsDampingRelaxation = suspensionDamping;
+ }
+ }
+
+ virtual void SetSuspensionCompression(float suspensionCompression,int wheelIndex)
+ {
+ if ((wheelIndex>=0) && (wheelIndex< m_vehicle->GetNumWheels()))
+ {
+ WheelInfo& info = m_vehicle->GetWheelInfo(wheelIndex);
+ info.m_wheelsDampingCompression = suspensionCompression;
+ }
+ }
+
+
+
+ virtual void SetRollInfluence(float rollInfluence,int wheelIndex)
+ {
+ if ((wheelIndex>=0) && (wheelIndex< m_vehicle->GetNumWheels()))
+ {
+ WheelInfo& info = m_vehicle->GetWheelInfo(wheelIndex);
+ info.m_rollInfluence = rollInfluence;
+ }
+ }
+
+
+
};
#endif //NEW_BULLET_VEHICLE_SUPPORT
diff --git a/source/gameengine/Physics/common/PHY_IVehicle.h b/source/gameengine/Physics/common/PHY_IVehicle.h
index 0e6fe3379a2..d5566ff5bb3 100644
--- a/source/gameengine/Physics/common/PHY_IVehicle.h
+++ b/source/gameengine/Physics/common/PHY_IVehicle.h
@@ -40,6 +40,17 @@ public:
virtual void ApplyBraking(float braking,int wheelIndex) = 0;
+ virtual void SetWheelFriction(float friction,int wheelIndex) = 0;
+
+ virtual void SetSuspensionStiffness(float suspensionStiffness,int wheelIndex) = 0;
+
+ virtual void SetSuspensionDamping(float suspensionStiffness,int wheelIndex) = 0;
+
+ virtual void SetSuspensionCompression(float suspensionStiffness,int wheelIndex) = 0;
+
+ virtual void SetRollInfluence(float rollInfluence,int wheelIndex) = 0;
+
+
};
#endif //PHY_IVEHICLE_H