- fix segmentation fault in DanDroid

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9168 30fe4595-0a0c-4342-8851-515496e4dcbd
This commit is contained in:
torcs-ng 2023-10-27 13:41:59 +00:00
parent 87176076ab
commit dbf680cbf9
3 changed files with 120 additions and 1 deletions

View File

@ -210,6 +210,9 @@ void TDriver::InitTrack(PTrack Track, PCarHandle CarHandle, PCarSettings* CarPar
GfParmSetNum(*CarParmHandle, SECT_ENGINE, PRM_FUELCONS, (char*)NULL, 0.0);
}
if(mHASCPD)
mTiresStart = getTires(CarHandle, Situation->_totLaps);
GfParmSetNum(*CarParmHandle, SECT_CAR, PRM_FUEL, (char*)NULL, (tdble)mFuelStart);
// Get skill level
@ -1833,6 +1836,83 @@ void TDriver::readConstSpecs(PCarHandle CarHandle)
}
else
LogDANDROID.info("#Car has TCL no\n");
double tiremuFL = GfParmGetNum(CarHandle, SECT_FRNTLFTWHEEL, PRM_MU, NULL, 0);
double tiremuFR = GfParmGetNum(CarHandle, SECT_FRNTRGTWHEEL, PRM_MU, NULL, 0);
double tiremuRL = GfParmGetNum(CarHandle, SECT_REARLFTWHEEL, PRM_MU, NULL, 0);
double tiremuRR = GfParmGetNum(CarHandle, SECT_REARRGTWHEEL, PRM_MU, NULL, 0);
double tiremufront = MIN(tiremuFL, tiremuFR);
double tiremurear = MIN(tiremuRL, tiremuRR);
mTireMu = MIN(tiremufront, tiremurear);
if (mHASCPD)
{
char path[256];
double tiremuFR, tiremuFL, tiremuRR, tiremuRL, tiremufront, tiremurear;
sprintf(path, "%s/%s/%s", SECT_FRNTRGTWHEEL, SECT_COMPOUNDS, SECT_SOFT);
tiremuFR = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_FRNTLFTWHEEL, SECT_COMPOUNDS, SECT_SOFT);
tiremuFL = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_REARRGTWHEEL, SECT_COMPOUNDS, SECT_SOFT);
tiremuRR = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_REARLFTWHEEL, SECT_COMPOUNDS, SECT_SOFT);
tiremuRL = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
tiremufront = MIN(tiremuFL, tiremuFR);
tiremurear = MIN(tiremuRL, tiremuRR);
mTireMuC[1] = MIN(tiremufront, tiremurear);
sprintf(path, "%s/%s/%s", SECT_FRNTRGTWHEEL, SECT_COMPOUNDS, SECT_MEDIUM);
tiremuFR = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_FRNTLFTWHEEL, SECT_COMPOUNDS, SECT_MEDIUM);
tiremuFL = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_REARRGTWHEEL, SECT_COMPOUNDS, SECT_MEDIUM);
tiremuRR = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_REARLFTWHEEL, SECT_COMPOUNDS, SECT_MEDIUM);
tiremuRL = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
tiremufront = MIN(tiremuFL, tiremuFR);
tiremurear = MIN(tiremuRL, tiremuRR);
mTireMuC[2] = MIN(tiremufront, tiremurear);
sprintf(path, "%s/%s/%s", SECT_FRNTRGTWHEEL, SECT_COMPOUNDS, SECT_HARD);
tiremuFR = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_FRNTLFTWHEEL, SECT_COMPOUNDS, SECT_HARD);
tiremuFL = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_REARRGTWHEEL, SECT_COMPOUNDS, SECT_HARD);
tiremuRR = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_REARLFTWHEEL, SECT_COMPOUNDS, SECT_HARD);
tiremuRL = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
tiremufront = MIN(tiremuFL, tiremuFR);
tiremurear = MIN(tiremuRL, tiremuRR);
mTireMuC[3] = MIN(tiremufront, tiremurear);
sprintf(path, "%s/%s/%s", SECT_FRNTRGTWHEEL, SECT_COMPOUNDS, SECT_WET);
tiremuFR = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_FRNTLFTWHEEL, SECT_COMPOUNDS, SECT_WET);
tiremuFL = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_REARRGTWHEEL, SECT_COMPOUNDS, SECT_WET);
tiremuRR = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_REARLFTWHEEL, SECT_COMPOUNDS, SECT_WET);
tiremuRL = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
tiremufront = MIN(tiremuFL, tiremuFR);
tiremurear = MIN(tiremuRL, tiremuRR);
mTireMuC[4] = MIN(tiremufront, tiremurear);
sprintf(path, "%s/%s/%s", SECT_FRNTRGTWHEEL, SECT_COMPOUNDS, SECT_EXTREM_WET);
tiremuFR = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_FRNTLFTWHEEL, SECT_COMPOUNDS, SECT_EXTREM_WET);
tiremuFL = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_REARRGTWHEEL, SECT_COMPOUNDS, SECT_EXTREM_WET);
tiremuRR = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
sprintf(path, "%s/%s/%s", SECT_REARLFTWHEEL, SECT_COMPOUNDS, SECT_EXTREM_WET);
tiremuRL = GfParmGetNum(CarHandle, path, PRM_MU, (char*)NULL, mTireMu);
tiremufront = MIN(tiremuFL, tiremuFR);
tiremurear = MIN(tiremuRL, tiremuRR);
mTireMuC[5] = MIN(tiremufront, tiremurear);
int compounds = GfParmGetNum(CarHandle, SECT_TIRESET, PRM_COMPOUNDS_SET, NULL, 1);
mTireMu = mTireMuC[compounds];
}
}
void TDriver::readVarSpecs(PCarSettings CarParmHandle)
@ -2753,6 +2833,43 @@ double TDriver::getFuel(double dist)
return fuel = MAX(MIN(fuel, mTANKVOL), 0.0);
}
int TDriver::getTires(PCarHandle CarHandle, double dist)
{
if (dist < 16 && mTrack->local.rain < 1)
{
GfParmSetNum(CarHandle, SECT_TIRESET, PRM_COMPOUNDS_SET, NULL, 1);
mTireMu = mTireMuC[0];
mTiresStart = 1;
}
else if (dist < 30 && mTrack->local.rain < 1)
{
GfParmSetNum(CarHandle, SECT_TIRESET, PRM_COMPOUNDS_SET, NULL, 2);
mTireMu = mTireMuC[1];
mTiresStart = 2;
}
else if ((mTrack->local.rain < 2 && mTrack->local.airtemperature > 28.0)
|| (mTrack->local.rain = 0 && dist >= 30))
{
GfParmSetNum(CarHandle, SECT_TIRESET, PRM_COMPOUNDS_SET, NULL, 3);
mTireMu = mTireMuC[2];
mTiresStart = 3;
}
else if (mTrack->local.rain < 3)
{
GfParmSetNum(CarHandle, SECT_TIRESET, PRM_COMPOUNDS_SET, NULL, 4);
mTireMu = mTireMuC[3];
mTiresStart = 4;
}
else
{
GfParmSetNum(CarHandle, SECT_TIRESET, PRM_COMPOUNDS_SET, NULL, 5);
mTireMu = mTireMuC[4];
mTiresStart = 5;
}
return mTiresStart;
}
void TDriver::writeSectorSpeeds()
{
char dirname[256];

View File

@ -139,6 +139,7 @@ private:
void controlYawRate(double& targetangle);
bool hysteresis(bool lastout, double in, double hyst);
double getFuel(double dist);
int getTires(PCarHandle CarHandle, double dist);
void writeSectorSpeeds();
bool readSectorSpeeds();
void driverMsg(std::string desc);
@ -191,6 +192,7 @@ private:
double mTireMu;
double mTireMuC[6];
double mTirecondition;
int mTiresStart;
double mMass; // mass of car + fuel
double mSpeed;
double mClutchtime;

View File

@ -43,7 +43,7 @@ void Pit::init(PTrack t, PSituation s, PtCarElt c, int pitdamage, double pitentr
MIN_WEAR = 0.4;
HASTYC = false;
HASCPD = false;
RAIN = track->local.rain;
RAIN = t->local.rain;
track = t;
car = c;
teamcar = NULL;