Use sim provided slip ratio if available for slip based effects

This commit is contained in:
Paul Dino Jones 2026-03-17 10:32:27 -04:00
parent f21bced7c6
commit 925cb0a2f1
1 changed files with 51 additions and 34 deletions

View File

@ -204,51 +204,68 @@ double slipeffect(SimData* simdata, int effecttype, int tyre, double threshold,
wheelslip[2] = 0; wheelslip[2] = 0;
wheelslip[3] = 0; wheelslip[3] = 0;
slogt("wheel vibration calculation with wheel config set to %i configchecked %i configfile %s car %s sim %i", useconfig, *configcheck, configfile, simdata->car, simdata->simexe); int sim_slip_ratio =0;
for (int i = 0; i < 4; i++)
switch (effecttype)
{ {
case (EFFECT_TYRESLIP): sim_slip_ratio = abs(simdata->tyreslipratio[i]);
case (EFFECT_TYRELOCK): }
case (EFFECT_ABSBRAKES):
if(sim_slip_ratio == 0)
{
slogt("wheel vibration calculation with wheel config set to %i configchecked %i configfile %s car %s sim %i", useconfig, *configcheck, configfile, simdata->car, simdata->simexe);
switch (effecttype)
{
case (EFFECT_TYRESLIP):
case (EFFECT_TYRELOCK):
case (EFFECT_ABSBRAKES):
if(hasTyreDiameter(simdata)==true) if(hasTyreDiameter(simdata)==true)
{
double Speedms = kmhtoms * simdata->velocity;
slogt("attempting wheel slip calculation");
if (Speedms > minspeedinms)
{ {
for(int i = 0; i < 4; i++) double Speedms = kmhtoms * simdata->velocity;
slogt("attempting wheel slip calculation");
if (Speedms > minspeedinms)
{ {
wheelslip[i] = (Speedms - simdata->tyrediameter[i] * simdata->tyreRPS[i] / 2) / Speedms; for(int i = 0; i < 4; i++)
{
wheelslip[i] = (Speedms - simdata->tyrediameter[i] * simdata->tyreRPS[i] / 2) / Speedms;
}
} }
} else
else
{
for(int i = 0; i < 4; i++)
{ {
wheelslip[i] = 0; for(int i = 0; i < 4; i++)
{
wheelslip[i] = 0;
}
} }
slogt("wheelslip values are %f %f %f %f", wheelslip[0], wheelslip[1], wheelslip[2], wheelslip[3]);
slogt("velocities (x,y,z) are %f %f %f", simdata->Xvelocity, simdata->Yvelocity, simdata->Zvelocity);
} }
slogt("wheelslip values are %f %f %f %f", wheelslip[0], wheelslip[1], wheelslip[2], wheelslip[3]); break;
slogt("velocities (x,y,z) are %f %f %f", simdata->Xvelocity, simdata->Yvelocity, simdata->Zvelocity); case EFFECT_SUSPENSION:
} break;
break; default:
case EFFECT_SUSPENSION: slogd("Unknown effect type");
break; }
default: if(simdata->Yvelocity <= 0)
slogd("Unknown effect type"); {
return 0;
}
if(simdata->Zvelocity > 1 || simdata->Zvelocity < -1)
{
return 0;
}
}
else
{
for (int i = 0; i < 4; i++)
{
wheelslip[i] = simdata->tyreslipratio[i];
}
slogt("wheelslip values from sim are %f %f %f %f", wheelslip[0], wheelslip[1], wheelslip[2], wheelslip[3]);
} }
if(simdata->Yvelocity <= 0)
{
return 0;
}
if(simdata->Zvelocity > 1 || simdata->Zvelocity < -1)
{
return 0;
}
switch (effecttype) switch (effecttype)
{ {