Code: Select all
btScalar CarEngine::computeRpmFromWheels(float time)
{
btScalar wheelRpms = 0;
btScalar nbWheels = 0;
for(int i = 0; i < mVehicle->getBulletVehicle()->getNumWheels(); i++)
{
if (mVehicle->getBulletVehicle()->getWheelInfo(i).m_bIsFrontWheel == false)
{
nbWheels++;
wheelRpms += abs(mVehicle->getBulletVehicle()->getWheelInfo(i).m_deltaRotation);
// yeah, i know that it`s not correctly at all, but i havn`t make a differential yet.
}
}
if(nbWheels > 0 && time > 0)
return wheelRpms * 60 / (nbWheels * SIMD_2_PI * time);
else
return btScalar(0);
}
void CarEngine::computeTorque(float time)
{
if(CurGear > 1)
{
btScalar RPM = computeRpmFromWheels(btScalar(time)) * Gears[CurGear] * MainGear;
btScalar torque = Throttle * getTorque(RPM) * RPM / 5100;
EngineForce = torque * Efficiency * Gears[CurGear] * MainGear;
for (int i = 0; i < 4; i++)
if (mVehicle->getBulletVehicle()->getWheelInfo(i).m_bIsFrontWheel == false)
mVehicle->getBulletVehicle()->applyEngineForce(EngineForce , i);
}
}