move tyre diameter calculations and diameters config saving out of haptic effect device specific logic
This commit is contained in:
parent
9815420c96
commit
b5b0355fc5
|
|
@ -30,11 +30,11 @@ bool hasTyreDiameter(SimData* simdata)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int loadtyreconfig(SimData* simdata, char* configfile)
|
int loadtyreconfig(SimData* simdata, char* configfile, bool setDiameters)
|
||||||
{
|
{
|
||||||
config_t cfg;
|
config_t cfg;
|
||||||
config_init(&cfg);
|
config_init(&cfg);
|
||||||
config_setting_t* config_cars = NULL;
|
const config_setting_t* config_cars = NULL;
|
||||||
|
|
||||||
if (!config_read_file(&cfg, configfile))
|
if (!config_read_file(&cfg, configfile))
|
||||||
{
|
{
|
||||||
|
|
@ -53,8 +53,9 @@ int loadtyreconfig(SimData* simdata, char* configfile)
|
||||||
}
|
}
|
||||||
slogt("parsing diameters config file");
|
slogt("parsing diameters config file");
|
||||||
|
|
||||||
int cars = config_setting_length(config_cars);
|
const int cars = config_setting_length(config_cars);
|
||||||
|
|
||||||
|
bool foundCar = false;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (i<cars)
|
while (i<cars)
|
||||||
{
|
{
|
||||||
|
|
@ -94,10 +95,15 @@ int loadtyreconfig(SimData* simdata, char* configfile)
|
||||||
if (strcicmp(car, simdata->car) == 0 && sim == simdata->simexe)
|
if (strcicmp(car, simdata->car) == 0 && sim == simdata->simexe)
|
||||||
{
|
{
|
||||||
slogi("found saved car %s with tyre diameters %f %f %f %f", car, tyre0, tyre1, tyre2, tyre3);
|
slogi("found saved car %s with tyre diameters %f %f %f %f", car, tyre0, tyre1, tyre2, tyre3);
|
||||||
simdata->tyrediameter[0] = tyre0;
|
foundCar = true;
|
||||||
simdata->tyrediameter[1] = tyre1;
|
if(setDiameters == true)
|
||||||
simdata->tyrediameter[2] = tyre2;
|
{
|
||||||
simdata->tyrediameter[3] = tyre3;
|
simdata->tyrediameter[0] = tyre0;
|
||||||
|
simdata->tyrediameter[1] = tyre1;
|
||||||
|
simdata->tyrediameter[2] = tyre2;
|
||||||
|
simdata->tyrediameter[3] = tyre3;
|
||||||
|
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -113,7 +119,11 @@ int loadtyreconfig(SimData* simdata, char* configfile)
|
||||||
|
|
||||||
config_destroy(&cfg);
|
config_destroy(&cfg);
|
||||||
|
|
||||||
return 0;
|
if(foundCar == true)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int savetyreconfig(SimData* simdata, char* configfile)
|
int savetyreconfig(SimData* simdata, char* configfile)
|
||||||
|
|
@ -194,11 +204,6 @@ double slipeffect(SimData* simdata, int effecttype, int tyre, double threshold,
|
||||||
wheelslip[2] = 0;
|
wheelslip[2] = 0;
|
||||||
wheelslip[3] = 0;
|
wheelslip[3] = 0;
|
||||||
|
|
||||||
if(simdata->car == NULL || simdata->car[0] == 0)
|
|
||||||
{
|
|
||||||
useconfig = 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);
|
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)
|
switch (effecttype)
|
||||||
|
|
@ -207,31 +212,7 @@ double slipeffect(SimData* simdata, int effecttype, int tyre, double threshold,
|
||||||
case (EFFECT_TYRELOCK):
|
case (EFFECT_TYRELOCK):
|
||||||
case (EFFECT_ABSBRAKES):
|
case (EFFECT_ABSBRAKES):
|
||||||
|
|
||||||
if(useconfig == 1 && configfile != NULL)
|
|
||||||
{
|
|
||||||
// check for saved tyre diameter in config file
|
|
||||||
// if not saved version exists get tyre diameter and save it
|
|
||||||
// use config check variable to track if the config check has been performed
|
|
||||||
// avoid many opens of the same file
|
|
||||||
int error = 0;
|
|
||||||
if(hasTyreDiameter(simdata)==false && *configcheck == 0)
|
|
||||||
{
|
|
||||||
slogi("attempting load of tyre diameter config");
|
|
||||||
error = loadtyreconfig(simdata, configfile);
|
|
||||||
*configcheck = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(hasTyreDiameter(simdata)==false)
|
|
||||||
{
|
|
||||||
slogt("could not find tyre diameter in config file, attempting to calculate new");
|
|
||||||
getTyreDiameter(simdata);
|
|
||||||
if(hasTyreDiameter(simdata)==true)
|
|
||||||
{
|
|
||||||
slogi("saving tyre config");
|
|
||||||
error = savetyreconfig(simdata, configfile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(hasTyreDiameter(simdata)==true)
|
if(hasTyreDiameter(simdata)==true)
|
||||||
{
|
{
|
||||||
double Speedms = kmhtoms * simdata->velocity;
|
double Speedms = kmhtoms * simdata->velocity;
|
||||||
|
|
|
||||||
|
|
@ -17,5 +17,9 @@ typedef struct
|
||||||
HapticEffect;
|
HapticEffect;
|
||||||
|
|
||||||
double slipeffect(SimData* simdata, int effecttype, int tyre, double threshold, int useconfig, int* configcheck, char* configfile);
|
double slipeffect(SimData* simdata, int effecttype, int tyre, double threshold, int useconfig, int* configcheck, char* configfile);
|
||||||
|
bool hasTyreDiameter(SimData* simdata);
|
||||||
|
int loadtyreconfig(SimData* simdata, char* configfile, bool setDiameters);
|
||||||
|
int savetyreconfig(SimData* simdata, char* configfile);
|
||||||
|
void getTyreDiameter(SimData* simdata);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
#include "loopdata.h"
|
#include "loopdata.h"
|
||||||
#include "../helper/confighelper.h"
|
#include "../helper/confighelper.h"
|
||||||
#include "../devices/simdevice.h"
|
#include "../devices/simdevice.h"
|
||||||
|
#include "../devices/hapticeffect.h"
|
||||||
#include "../simulatorapi/simapi/simapi/simdata.h"
|
#include "../simulatorapi/simapi/simapi/simdata.h"
|
||||||
#include "../simulatorapi/simapi/simapi/simmapper.h"
|
#include "../simulatorapi/simapi/simapi/simmapper.h"
|
||||||
#include "../slog/slog.h"
|
#include "../slog/slog.h"
|
||||||
|
|
@ -298,6 +299,30 @@ void looprun(MonocoqueSettings* ms, loop_data* f, SimData* simdata)
|
||||||
// devices[x].update(&devices[x], simdata);
|
// devices[x].update(&devices[x], simdata);
|
||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
if(f->ms->useconfig == 1 && f->ms->tyre_diameter_config != NULL)
|
||||||
|
{
|
||||||
|
if(simdata->car != NULL || simdata->car[0] != 0)
|
||||||
|
{
|
||||||
|
// check for saved tyre diameter in config file
|
||||||
|
// if not saved version exists get tyre diameter and save it
|
||||||
|
// use config check variable to track if the config check has been performed
|
||||||
|
// avoid many opens of the same file
|
||||||
|
int error = 0;
|
||||||
|
if(hasTyreDiameter(simdata)==false && f->ms->configcheck == 0)
|
||||||
|
{
|
||||||
|
slogi("attempting load of tyre diameter config");
|
||||||
|
error = loadtyreconfig(simdata, f->ms->tyre_diameter_config, true);
|
||||||
|
f->ms->configcheck = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(hasTyreDiameter(simdata)==false)
|
||||||
|
{
|
||||||
|
slogt("could not find tyre diameter in config file, attempting to calculate new");
|
||||||
|
getTyreDiameter(simdata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -322,6 +347,18 @@ void releaseloop(loop_data* f, SimData* simdata, SimMap* simmap)
|
||||||
uv_timer_stop(&datamaptimer);
|
uv_timer_stop(&datamaptimer);
|
||||||
uv_timer_stop(&showstatstimer);
|
uv_timer_stop(&showstatstimer);
|
||||||
slogi("releasing devices, please wait");
|
slogi("releasing devices, please wait");
|
||||||
|
|
||||||
|
//attempt tyre diameter saving
|
||||||
|
if(hasTyreDiameter(simdata) == true)
|
||||||
|
{
|
||||||
|
int a = loadtyreconfig(simdata, f->ms->tyre_diameter_config, false);
|
||||||
|
if(a < 0)
|
||||||
|
{
|
||||||
|
slogi("saving new tyre diameter config");
|
||||||
|
savetyreconfig(simdata, f->ms->tyre_diameter_config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
f->uion = false;
|
f->uion = false;
|
||||||
SimDevice* devices = f->simdevices;
|
SimDevice* devices = f->simdevices;
|
||||||
int numdevices = f->numdevices;
|
int numdevices = f->numdevices;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue