forked from bartvdbraak/blender
exposed a few more tuning paramters
This commit is contained in:
parent
e4d8bd5984
commit
e3b840d086
@ -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
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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},
|
||||
|
||||
{"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
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user