diff --git a/src/monocoque/devices/hapticeffect.c b/src/monocoque/devices/hapticeffect.c index 138f0c5..88a2165 100644 --- a/src/monocoque/devices/hapticeffect.c +++ b/src/monocoque/devices/hapticeffect.c @@ -30,11 +30,11 @@ bool hasTyreDiameter(SimData* simdata) return true; } -int loadtyreconfig(SimData* simdata, char* configfile) +int loadtyreconfig(SimData* simdata, char* configfile, bool setDiameters) { config_t cfg; config_init(&cfg); - config_setting_t* config_cars = NULL; + const config_setting_t* config_cars = NULL; if (!config_read_file(&cfg, configfile)) { @@ -53,8 +53,9 @@ int loadtyreconfig(SimData* simdata, char* configfile) } 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; while (icar) == 0 && sim == simdata->simexe) { slogi("found saved car %s with tyre diameters %f %f %f %f", car, tyre0, tyre1, tyre2, tyre3); - simdata->tyrediameter[0] = tyre0; - simdata->tyrediameter[1] = tyre1; - simdata->tyrediameter[2] = tyre2; - simdata->tyrediameter[3] = tyre3; + foundCar = true; + if(setDiameters == true) + { + simdata->tyrediameter[0] = tyre0; + simdata->tyrediameter[1] = tyre1; + simdata->tyrediameter[2] = tyre2; + simdata->tyrediameter[3] = tyre3; + + } break; } } @@ -113,7 +119,11 @@ int loadtyreconfig(SimData* simdata, char* configfile) config_destroy(&cfg); - return 0; + if(foundCar == true) + { + return i; + } + return -1; } int savetyreconfig(SimData* simdata, char* configfile) @@ -194,11 +204,6 @@ double slipeffect(SimData* simdata, int effecttype, int tyre, double threshold, wheelslip[2] = 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); switch (effecttype) @@ -207,31 +212,7 @@ double slipeffect(SimData* simdata, int effecttype, int tyre, double threshold, case (EFFECT_TYRELOCK): 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) { double Speedms = kmhtoms * simdata->velocity; diff --git a/src/monocoque/devices/hapticeffect.h b/src/monocoque/devices/hapticeffect.h index f69e197..efbbef8 100644 --- a/src/monocoque/devices/hapticeffect.h +++ b/src/monocoque/devices/hapticeffect.h @@ -17,5 +17,9 @@ typedef struct HapticEffect; 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 diff --git a/src/monocoque/gameloop/gameloop.c b/src/monocoque/gameloop/gameloop.c index 97d6593..5b892fe 100644 --- a/src/monocoque/gameloop/gameloop.c +++ b/src/monocoque/gameloop/gameloop.c @@ -13,6 +13,7 @@ #include "loopdata.h" #include "../helper/confighelper.h" #include "../devices/simdevice.h" +#include "../devices/hapticeffect.h" #include "../simulatorapi/simapi/simapi/simdata.h" #include "../simulatorapi/simapi/simapi/simmapper.h" #include "../slog/slog.h" @@ -298,6 +299,30 @@ void looprun(MonocoqueSettings* ms, loop_data* f, SimData* 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(&showstatstimer); 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; SimDevice* devices = f->simdevices; int numdevices = f->numdevices;