diff --git a/src/drivers/simplix/src/unitstrategy.cpp b/src/drivers/simplix/src/unitstrategy.cpp
index 0ce088c5d..694caf7c6 100644
--- a/src/drivers/simplix/src/unitstrategy.cpp
+++ b/src/drivers/simplix/src/unitstrategy.cpp
@@ -428,7 +428,7 @@ void TSimpleStrategy::Update(PtCarElt Car,
//==========================================================================*
// State (Sequential logic system)
//--------------------------------------------------------------------------*
-void TSimpleStrategy::CheckPitState(float PitScaleBrake)
+void TSimpleStrategy::CheckPitState(float /*PitScaleBrake*/)
{
if (oPit == NULL) // No Pit no service
return;
@@ -485,8 +485,10 @@ void TSimpleStrategy::CheckPitState(float PitScaleBrake)
// We reached the poit to stopp
oState = PIT_ASKED;
LogSimplix.debug("#PIT_ENTER: %g\n", TrackPos);
-
- // falls through...
+ // falls through...
+#if ( __GNUC__ >= 5 || _MSVC_VER >= 1910)
+ [[fallthrough]];
+#endif
case PIT_ASKED:
// We are still going to the pit
@@ -496,7 +498,7 @@ void TSimpleStrategy::CheckPitState(float PitScaleBrake)
oDriver->oStanding = true; // For motion survey!
oPitTicker = 0; // Start service timer
CarAccelCmd = 0; // release throttle
- CarBrakeCmd = 1.0 * PitScaleBrake; // Start braking
+ CarBrakeCmd = 1.0; // Start braking
CarRaceCmd = RM_CMD_PIT_ASKED; // Tell TORCS to service us! To test oPitTicker comment out
oState = PIT_SERVICE;
}
diff --git a/src/modules/graphic/ssggraph/grmain.cpp b/src/modules/graphic/ssggraph/grmain.cpp
index d37eb1f98..475f51b8b 100644
--- a/src/modules/graphic/ssggraph/grmain.cpp
+++ b/src/modules/graphic/ssggraph/grmain.cpp
@@ -138,6 +138,7 @@ grAdaptScreenSize(void)
switch (grNbArrangeScreens) {
default:
grNbArrangeScreens = 0;
+ [[fallthrough]];
case 0:
// Top & Bottom half of the window
grScreens[0]->activate(grWinx, grWiny + grWinh / 2, grWinw, grWinh / 2, 0.0);
@@ -167,6 +168,9 @@ grAdaptScreenSize(void)
switch (grNbArrangeScreens) {
default:
grNbArrangeScreens = 0;
+#if ( __GNUC__ >= 5 || _MSVC_VER >= 1910)
+ [[fallthrough]];
+#endif
case 0:
// Left/Right below wide
grScreens[0]->activate(grWinx, grWiny + grWinh / 2, grWinw, grWinh / 2, 0.0);
@@ -224,8 +228,12 @@ grAdaptScreenSize(void)
grScreens[3]->activate(grWinx + grWinw * 3/4, grWiny, grWinw / 4, grWinh, 0.0);
break;
}
+#if ( __GNUC__ >= 5 || _MSVC_VER >= 1910)
+ [[fallthrough]];
+#endif
default:
grNbArrangeScreens = 0;
+ [[fallthrough]];
case 0:
// Top/Bottom Left/Rigth Quarters
grScreens[0]->activate(grWinx, grWiny + grWinh / 2, grWinw / 2, grWinh / 2, 0.0);
@@ -290,6 +298,9 @@ grAdaptScreenSize(void)
switch (grNbArrangeScreens) {
default:
grNbArrangeScreens = 0;
+#if ( __GNUC__ >= 5 || _MSVC_VER >= 1910)
+ [[fallthrough]];
+#endif
case 0:
// Top/Bottom Left/Middle/Rigth Matrix
grScreens[0]->activate(grWinx, grWiny + grWinh / 2, grWinw / 2, grWinh / 2, 0.0);
@@ -323,8 +334,14 @@ grAdaptScreenSize(void)
grScreens[5]->activate(grWinx + grWinw * 5/6, grWiny, grWinw / 6, grWinh, 0.0);
break;
}
+#if ( __GNUC__ >= 5 || _MSVC_VER >= 1910)
+ [[fallthrough]];
+#endif
default:
grNbArrangeScreens = 0;
+#if ( __GNUC__ >= 5 || _MSVC_VER >= 1910)
+ [[fallthrough]];
+#endif
case 0:
// Top/Bottom Left/Middle/Rigth Matrix
grScreens[0]->activate(grWinx, grWiny + grWinh / 2, grWinw / 3, grWinh / 2, 0.0);
diff --git a/src/modules/racing/genparoptv1/raceresults.cpp b/src/modules/racing/genparoptv1/raceresults.cpp
index 981c90f1b..265f48a13 100644
--- a/src/modules/racing/genparoptv1/raceresults.cpp
+++ b/src/modules/racing/genparoptv1/raceresults.cpp
@@ -4,7 +4,7 @@
created : Thu Jan 2 12:43:10 CET 2003
copyright : (C) 2002 by Eric Espie
email : eric.espie@torcs.org
- version : $Id$
+ version : $Id$
***************************************************************************/
@@ -17,8 +17,8 @@
* *
***************************************************************************/
-/** @file
- Results managment for all race types
+/** @file
+ Results managment for all race types
@author Eric Espie
@version $Id$
*/
@@ -48,583 +48,586 @@ static char path2[1024];
typedef struct ReStandings
{
- std::string drvName;
- std::string modName;
- std::string carName;
- int extended;
- int drvIdx;
- int points;
+ std::string drvName;
+ std::string modName;
+ std::string carName;
+ int extended;
+ int drvIdx;
+ int points;
} tReStandings;
void
ReInitResults(void)
{
- struct tm *stm;
- time_t t;
- void *results;
-
- t = time(NULL);
- stm = localtime(&t);
- snprintf(buf, sizeof(buf), "results/%s/results-%4d-%02d-%02d-%02d-%02d.xml",
- ReInfo->_reFilename,
- stm->tm_year+1900,
- stm->tm_mon+1,
- stm->tm_mday,
- stm->tm_hour,
- stm->tm_min);
-
- ReInfo->results = GfParmReadFileLocal(buf, GFPARM_RMODE_STD | GFPARM_RMODE_CREAT);
- ReInfo->mainResults = ReInfo->results;
- results = ReInfo->results;
- GfParmSetNum(results, RE_SECT_HEADER, RE_ATTR_DATE, NULL, (tdble)t);
- GfParmSetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_TRACK, NULL, 1);
- GfParmSetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_RACE, NULL, 1);
- GfParmSetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_DRIVER, NULL, 1);
+ struct tm *stm;
+ time_t t;
+ void *results;
+
+ t = time(NULL);
+ stm = localtime(&t);
+ snprintf(buf, sizeof(buf), "results/%s/results-%4d-%02d-%02d-%02d-%02d.xml",
+ ReInfo->_reFilename,
+ stm->tm_year+1900,
+ stm->tm_mon+1,
+ stm->tm_mday,
+ stm->tm_hour,
+ stm->tm_min);
+
+ ReInfo->results = GfParmReadFileLocal(buf, GFPARM_RMODE_STD | GFPARM_RMODE_CREAT);
+ ReInfo->mainResults = ReInfo->results;
+ results = ReInfo->results;
+ GfParmSetNum(results, RE_SECT_HEADER, RE_ATTR_DATE, NULL, (tdble)t);
+ GfParmSetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_TRACK, NULL, 1);
+ GfParmSetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_RACE, NULL, 1);
+ GfParmSetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_DRIVER, NULL, 1);
}
void
ReEventInitResults(void)
{
- void *results = ReInfo->results;
- void *params = ReInfo->params;
-
- const int nCars = GfParmGetEltNb(params, RM_SECT_DRIVERS);
- for (int i = 1; i < nCars + 1; i++)
- {
- snprintf(path, sizeof(path), "%s/%s/%d", ReInfo->track->name, RM_SECT_DRIVERS, i);
- snprintf(path2, sizeof(path2), "%s/%d", RM_SECT_DRIVERS, i);
- GfParmSetStr(results, path, RE_ATTR_DLL_NAME,
- GfParmGetStr(params, path2, RM_ATTR_MODULE, ""));
- GfParmSetNum(results, path, RE_ATTR_INDEX, NULL,
- GfParmGetNum(params, path2, RM_ATTR_IDX, (char*)NULL, 0));
- GfParmSetNum(results, path, RM_ATTR_EXTENDED, NULL,
- GfParmGetNum(params, path2, RM_ATTR_EXTENDED, (char*)NULL, 0));
- //GfParmSetStr(results, path, ROB_ATTR_NAME,
- // GfParmGetStr(params, path2, ROB_ATTR_NAME, ""));
- //GfParmSetStr(results, path, ROB_ATTR_CAR,
- // GfParmGetStr(params, path2, ROB_ATTR_CAR, ""));
- }
+ void *results = ReInfo->results;
+ void *params = ReInfo->params;
+
+ const int nCars = GfParmGetEltNb(params, RM_SECT_DRIVERS);
+ for (int i = 1; i < nCars + 1; i++)
+ {
+ snprintf(path, sizeof(path), "%s/%s/%d", ReInfo->track->name, RM_SECT_DRIVERS, i);
+ snprintf(path2, sizeof(path2), "%s/%d", RM_SECT_DRIVERS, i);
+ GfParmSetStr(results, path, RE_ATTR_DLL_NAME,
+ GfParmGetStr(params, path2, RM_ATTR_MODULE, ""));
+ GfParmSetNum(results, path, RE_ATTR_INDEX, NULL,
+ GfParmGetNum(params, path2, RM_ATTR_IDX, (char*)NULL, 0));
+ GfParmSetNum(results, path, RM_ATTR_EXTENDED, NULL,
+ GfParmGetNum(params, path2, RM_ATTR_EXTENDED, (char*)NULL, 0));
+ //GfParmSetStr(results, path, ROB_ATTR_NAME,
+ // GfParmGetStr(params, path2, ROB_ATTR_NAME, ""));
+ //GfParmSetStr(results, path, ROB_ATTR_CAR,
+ // GfParmGetStr(params, path2, ROB_ATTR_CAR, ""));
+ }
}
//for sort()
inline bool sortByScore(const tReStandings& a, const tReStandings& b)
{
- return (a.points > b.points);
+ return (a.points > b.points);
}
-
+
//for find()
inline bool operator ==(const tReStandings& a, const std::string &b)
{
- return a.drvName == b;
+ return a.drvName == b;
}
void
ReUpdateStandings(void)
{
- tReStandings st;
- std::string drvName;
- std::vector *standings;
- std::vector::iterator found;
- std::vector::iterator it;
- int runDrv, curDrv;
- int i;
- void *results = ReInfo->results;
+ tReStandings st;
+ std::string drvName;
+ std::vector *standings;
+ std::vector::iterator found;
+ std::vector::iterator it;
+ int runDrv, curDrv;
+ int i;
+ void *results = ReInfo->results;
- snprintf(path, sizeof(path), "%s/%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, ReInfo->_reRaceName, RE_SECT_RANK);
- runDrv = GfParmGetEltNb(results, path);
- curDrv = GfParmGetEltNb(results, RE_SECT_STANDINGS);
-
- standings = new std::vector;
+ snprintf(path, sizeof(path), "%s/%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, ReInfo->_reRaceName, RE_SECT_RANK);
+ runDrv = GfParmGetEltNb(results, path);
+ curDrv = GfParmGetEltNb(results, RE_SECT_STANDINGS);
- standings->reserve(curDrv);
+ standings = new std::vector;
- /* Read the current standings */
- for (i = 0; i < curDrv; i++)
- {
- snprintf(path2, sizeof(path2), "%s/%d", RE_SECT_STANDINGS, i + 1);
- st.drvName = GfParmGetStr(results, path2, RE_ATTR_NAME, 0);
- st.modName = GfParmGetStr(results, path2, RE_ATTR_MODULE, 0);
- st.carName = GfParmGetStr(results, path2, RE_ATTR_CAR, 0);
- st.extended = (int)GfParmGetNum(results, path2, RM_ATTR_EXTENDED, NULL, 0);
- st.drvIdx = (int)GfParmGetNum(results, path2, RE_ATTR_IDX, NULL, 0);
- st.points = (int)GfParmGetNum(results, path2, RE_ATTR_POINTS, NULL, 0);
- standings->push_back(st);
- }//for i
+ standings->reserve(curDrv);
- //Void the stored results
- GfParmListClean(results, RE_SECT_STANDINGS);
-
- //Check last races' drivers and search their name in the results.
- //If found there, adds recent points.
- //If not found, adds the driver
- for (i = 0; i < runDrv; i++) {
- //Search the driver name in the standings
- snprintf(path, sizeof(path), "%s/%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, ReInfo->_reRaceName, RE_SECT_RANK, i + 1);
- drvName = GfParmGetStr(results, path, RE_ATTR_NAME, 0);
- found = std::find(standings->begin(), standings->end(), drvName);
-
- if(found == standings->end()) {
- //No such driver in the standings, let's add it
- st.drvName = drvName;
- st.modName = GfParmGetStr(results, path, RE_ATTR_MODULE, 0);
- st.carName = GfParmGetStr(results, path, RE_ATTR_CAR, 0);
- st.extended = (int)GfParmGetNum(results, path, RM_ATTR_EXTENDED, NULL, 0);
- st.drvIdx = (int)GfParmGetNum(results, path, RE_ATTR_IDX, NULL, 0);
- st.points = (int)GfParmGetNum(results, path, RE_ATTR_POINTS, NULL, 0);
- standings->push_back(st);
- } else {
- //Driver found, add recent points
- found->points += (int)GfParmGetNum(results, path, RE_ATTR_POINTS, NULL, 0);
- }//if found
- }//for i
-
- //sort standings by score
- std::sort(standings->begin(), standings->end(), sortByScore);
-
- //Store the standing back
- for(it = standings->begin(), i = 0; it != standings->end(); ++it, ++i) {
- snprintf(path, sizeof(path), "%s/%d", RE_SECT_STANDINGS, i + 1);
- GfParmSetStr(results, path, RE_ATTR_NAME, it->drvName.c_str());
- GfParmSetStr(results, path, RE_ATTR_MODULE, it->modName.c_str());
- GfParmSetStr(results, path, RE_ATTR_CAR, it->carName.c_str());
- GfParmSetNum(results, path, RE_ATTR_IDX, NULL, (tdble)it->drvIdx);
- GfParmSetNum(results, path, RE_ATTR_POINTS, NULL, (tdble)it->points);
- }//for it
- delete standings;
-
- char str1[512], str2[512];
- snprintf(str1, sizeof(str1), "%sconfig/params.dtd", GfDataDir());
- snprintf(str2, sizeof(str2), "", GfDataDir());
-
- GfParmSetDTD (results, str1, str2);
- GfParmWriteFile(0, results, "Results");
+ /* Read the current standings */
+ for (i = 0; i < curDrv; i++)
+ {
+ snprintf(path2, sizeof(path2), "%s/%d", RE_SECT_STANDINGS, i + 1);
+ st.drvName = GfParmGetStr(results, path2, RE_ATTR_NAME, 0);
+ st.modName = GfParmGetStr(results, path2, RE_ATTR_MODULE, 0);
+ st.carName = GfParmGetStr(results, path2, RE_ATTR_CAR, 0);
+ st.extended = (int)GfParmGetNum(results, path2, RM_ATTR_EXTENDED, NULL, 0);
+ st.drvIdx = (int)GfParmGetNum(results, path2, RE_ATTR_IDX, NULL, 0);
+ st.points = (int)GfParmGetNum(results, path2, RE_ATTR_POINTS, NULL, 0);
+ standings->push_back(st);
+ }//for i
+
+ //Void the stored results
+ GfParmListClean(results, RE_SECT_STANDINGS);
+
+ //Check last races' drivers and search their name in the results.
+ //If found there, adds recent points.
+ //If not found, adds the driver
+ for (i = 0; i < runDrv; i++) {
+ //Search the driver name in the standings
+ snprintf(path, sizeof(path), "%s/%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, ReInfo->_reRaceName, RE_SECT_RANK, i + 1);
+ drvName = GfParmGetStr(results, path, RE_ATTR_NAME, 0);
+ found = std::find(standings->begin(), standings->end(), drvName);
+
+ if(found == standings->end()) {
+ //No such driver in the standings, let's add it
+ st.drvName = drvName;
+ st.modName = GfParmGetStr(results, path, RE_ATTR_MODULE, 0);
+ st.carName = GfParmGetStr(results, path, RE_ATTR_CAR, 0);
+ st.extended = (int)GfParmGetNum(results, path, RM_ATTR_EXTENDED, NULL, 0);
+ st.drvIdx = (int)GfParmGetNum(results, path, RE_ATTR_IDX, NULL, 0);
+ st.points = (int)GfParmGetNum(results, path, RE_ATTR_POINTS, NULL, 0);
+ standings->push_back(st);
+ } else {
+ //Driver found, add recent points
+ found->points += (int)GfParmGetNum(results, path, RE_ATTR_POINTS, NULL, 0);
+ }//if found
+ }//for i
+
+ //sort standings by score
+ std::sort(standings->begin(), standings->end(), sortByScore);
+
+ //Store the standing back
+ for(it = standings->begin(), i = 0; it != standings->end(); ++it, ++i) {
+ snprintf(path, sizeof(path), "%s/%d", RE_SECT_STANDINGS, i + 1);
+ GfParmSetStr(results, path, RE_ATTR_NAME, it->drvName.c_str());
+ GfParmSetStr(results, path, RE_ATTR_MODULE, it->modName.c_str());
+ GfParmSetStr(results, path, RE_ATTR_CAR, it->carName.c_str());
+ GfParmSetNum(results, path, RE_ATTR_IDX, NULL, (tdble)it->drvIdx);
+ GfParmSetNum(results, path, RE_ATTR_POINTS, NULL, (tdble)it->points);
+ }//for it
+ delete standings;
+
+ char str1[512], str2[512];
+ snprintf(str1, sizeof(str1), "%sconfig/params.dtd", GfDataDir());
+ snprintf(str2, sizeof(str2), "", GfDataDir());
+
+ GfParmSetDTD (results, str1, str2);
+ GfParmWriteFile(0, results, "Results");
}//ReUpdateStandings
void ReCalculateClassPoints(char const *race)
{
- double points;
- char *path3;
- int rank = 1;
- int count;
+ double points;
+ char *path3;
+ int rank = 1;
+ int count;
- snprintf(buf, sizeof(buf), "%s/%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, ReInfo->_reRaceName, RE_SECT_RANK);
- path3 = strdup(buf);
- if (GfParmListSeekFirst(ReInfo->results, path3) != 0)
- {
- free(path3);
- return; /* No result found */
- }
- count = GfParmGetEltNb(ReInfo->results, path3);
- do {
- snprintf( path2, sizeof(path2), "%s/%s", race, RM_SECT_CLASSPOINTS );
- if (GfParmListSeekFirst( ReInfo->params, path2 ) != 0) {
- GfLogDebug( "ReCalculateClassPoints: First not found in %s)\n", path2 );
- continue;
- }
- do {
- snprintf( buf, sizeof(buf), "%s/%s", path2, GfParmListGetCurEltName( ReInfo->params, path2 ) );
- snprintf( path, sizeof(path), "%s/%s/%d/%d/%s", RE_SECT_CLASSPOINTS,
- GfParmGetCurStr (ReInfo->results, path3, RE_ATTR_MODULE, ""),
- (int)GfParmGetCurNum (ReInfo->results, path3, RM_ATTR_EXTENDED, NULL, 0),
- (int)GfParmGetCurNum (ReInfo->results, path3, RE_ATTR_IDX, NULL, 0),
- GfParmGetStr( ReInfo->params, buf, RM_ATTR_SUFFIX, "" ) );
- points = GfParmGetNum (ReInfo->results, path, RE_ATTR_POINTS, NULL, 0);
- GfParmSetVariable (ReInfo->params, buf, "pos", (tdble)rank);
- GfParmSetVariable (ReInfo->params, buf, "cars", (tdble)count);
- //GfLogDebug( "ReCalculateClassPoints: pos = %d; count = %d\n", rank, count);
- //GfLogDebug( "ReCalculateClassPoints: GfParmGetNum (..., %s, %s, NULL, 0)\n", buf, RM_ATTR_POINTS );
- points += ( GfParmGetNum (ReInfo->params, buf, RM_ATTR_POINTS, NULL, 0) /
- GfParmGetNum (ReInfo->params, RM_SECT_TRACKS, RM_ATTR_NUMBER, NULL, 1) );
- GfParmRemoveVariable (ReInfo->params, buf, "pos");
- GfParmRemoveVariable (ReInfo->params, buf, "cars");
- GfParmSetNum (ReInfo->results, path, RE_ATTR_POINTS, NULL, (tdble)points);
- } while (GfParmListSeekNext( ReInfo->params, path2 ) == 0);
- ++rank;
- } while (GfParmListSeekNext (ReInfo->results, path3) == 0);
- free(path3);
+ snprintf(buf, sizeof(buf), "%s/%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, ReInfo->_reRaceName, RE_SECT_RANK);
+ path3 = strdup(buf);
+ if (GfParmListSeekFirst(ReInfo->results, path3) != 0)
+ {
+ free(path3);
+ return; /* No result found */
+ }
+ count = GfParmGetEltNb(ReInfo->results, path3);
+ do {
+ snprintf( path2, sizeof(path2), "%s/%s", race, RM_SECT_CLASSPOINTS );
+ if (GfParmListSeekFirst( ReInfo->params, path2 ) != 0) {
+ GfLogDebug( "ReCalculateClassPoints: First not found in %s)\n", path2 );
+ continue;
+ }
+ do {
+ snprintf( buf, sizeof(buf), "%s/%s", path2, GfParmListGetCurEltName( ReInfo->params, path2 ) );
+ snprintf( path, sizeof(path), "%s/%s/%d/%d/%s", RE_SECT_CLASSPOINTS,
+ GfParmGetCurStr (ReInfo->results, path3, RE_ATTR_MODULE, ""),
+ (int)GfParmGetCurNum (ReInfo->results, path3, RM_ATTR_EXTENDED, NULL, 0),
+ (int)GfParmGetCurNum (ReInfo->results, path3, RE_ATTR_IDX, NULL, 0),
+ GfParmGetStr( ReInfo->params, buf, RM_ATTR_SUFFIX, "" ) );
+ points = GfParmGetNum (ReInfo->results, path, RE_ATTR_POINTS, NULL, 0);
+ GfParmSetVariable (ReInfo->params, buf, "pos", (tdble)rank);
+ GfParmSetVariable (ReInfo->params, buf, "cars", (tdble)count);
+ //GfLogDebug( "ReCalculateClassPoints: pos = %d; count = %d\n", rank, count);
+ //GfLogDebug( "ReCalculateClassPoints: GfParmGetNum (..., %s, %s, NULL, 0)\n", buf, RM_ATTR_POINTS );
+ points += ( GfParmGetNum (ReInfo->params, buf, RM_ATTR_POINTS, NULL, 0) /
+ GfParmGetNum (ReInfo->params, RM_SECT_TRACKS, RM_ATTR_NUMBER, NULL, 1) );
+ GfParmRemoveVariable (ReInfo->params, buf, "pos");
+ GfParmRemoveVariable (ReInfo->params, buf, "cars");
+ GfParmSetNum (ReInfo->results, path, RE_ATTR_POINTS, NULL, (tdble)points);
+ } while (GfParmListSeekNext( ReInfo->params, path2 ) == 0);
+ ++rank;
+ } while (GfParmListSeekNext (ReInfo->results, path3) == 0);
+ free(path3);
}
void
ReStoreRaceResults(const char *race)
{
- int i;
- int nCars;
- tCarElt *car;
- tSituation *s = ReInfo->s;
- char *carName;
- void *carparam;
- void *results = ReInfo->results;
- void *params = ReInfo->params;
-
- /* Store the number of laps of the race */
- switch (ReInfo->s->_raceType) {
- case RM_TYPE_RACE:
- car = s->cars[0];
- if (car->_laps > s->_totLaps) car->_laps = s->_totLaps + 1;
+ int i;
+ int nCars;
+ tCarElt *car;
+ tSituation *s = ReInfo->s;
+ char *carName;
+ void *carparam;
+ void *results = ReInfo->results;
+ void *params = ReInfo->params;
- snprintf(path, sizeof(path), "%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, race);
- GfParmListClean(results, path);
- GfParmSetNum(results, path, RE_ATTR_LAPS, NULL, (tdble)(car->_laps - 1));
-
- for (i = 0; i < s->_ncars; i++) {
- snprintf(path, sizeof(path), "%s/%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK, i + 1);
- car = s->cars[i];
- if (car->_laps > s->_totLaps)
- car->_laps = s->_totLaps + 1;
-
- GfParmSetStr(results, path, RE_ATTR_NAME, car->_name);
-
- snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
- carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
- carName = GfParmGetName(carparam);
-
- GfParmSetStr(results, path, RE_ATTR_CAR, carName);
- GfParmSetNum(results, path, RE_ATTR_INDEX, NULL, (tdble)car->index);
-
- GfParmSetNum(results, path, RE_ATTR_LAPS, NULL, (tdble)(car->_laps - 1));
- GfParmSetNum(results, path, RE_ATTR_TIME, NULL, (tdble)car->_curTime);
- GfParmSetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, (tdble)car->_bestLapTime);
- GfParmSetNum(results, path, RE_ATTR_TOP_SPEED, NULL, car->_topSpeed);
- GfParmSetNum(results, path, RE_ATTR_DAMMAGES, NULL, (tdble)car->_dammage);
- GfParmSetNum(results, path, RE_ATTR_NB_PIT_STOPS, NULL, (tdble)car->_nbPitStops);
-
- GfParmSetStr(results, path, RE_ATTR_MODULE, car->_modName);
- GfParmSetNum(results, path, RE_ATTR_IDX, NULL, (tdble)car->_moduleIndex);
- snprintf(path2, sizeof(path2), "%s/%d", RM_SECT_DRIVERS_RACING, car->index + 1 );
- GfParmSetNum(results, path, RM_ATTR_EXTENDED, NULL,
- GfParmGetNum(params, path2, RM_ATTR_EXTENDED, NULL, 0));
- GfParmSetStr(results, path, ROB_ATTR_CAR, car->_carName);
- snprintf(path2, sizeof(path2), "%s/%s/%d", race, RM_SECT_POINTS, i + 1);
- GfParmSetNum(results, path, RE_ATTR_POINTS, NULL,
- GfParmGetNum(params, path2, RE_ATTR_POINTS, NULL, 0));
- if (strlen(car->_skinName) > 0)
- GfParmSetStr(results, path, RM_ATTR_SKINNAME, car->_skinName);
- GfParmSetNum(results, path, RM_ATTR_SKINTARGETS, NULL, (tdble)car->_skinTargets);
+ /* Store the number of laps of the race */
+ switch (ReInfo->s->_raceType) {
+ case RM_TYPE_RACE:
+ car = s->cars[0];
+ if (car->_laps > s->_totLaps) car->_laps = s->_totLaps + 1;
- GfParmReleaseHandle(carparam);
- }
- break;
-
- case RM_TYPE_PRACTICE:
- if (s->_ncars == 1)
- {
- car = s->cars[0];
- snprintf(path, sizeof(path), "%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, race);
- GfParmSetStr(results, path, RM_ATTR_DRVNAME, car->_name);
- snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
- carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
- carName = GfParmGetName(carparam);
- GfParmSetStr(results, path, RE_ATTR_CAR, carName);
- GfParmReleaseHandle(carparam);
- break;
- }
- /* Otherwise, fall through */
-
- case RM_TYPE_QUALIF:
- if (s->_ncars == 1)
- {
- car = s->cars[0];
- snprintf(path, sizeof(path), "%s/%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK);
- nCars = GfParmGetEltNb(results, path);
- for (i = nCars; i > 0; i--) {
- snprintf(path, sizeof(path), "%s/%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK, i);
- float opponentBestLapTime = GfParmGetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, 0);
-
- if (car->_bestLapTime != 0.0
- && (car->_bestLapTime < opponentBestLapTime || opponentBestLapTime == 0.0))
- {
- /* shift */
- snprintf(path2, sizeof(path2), "%s/%s/%s/%s/%d",
- ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK, i + 1);
- GfParmSetStr(results, path2, RE_ATTR_NAME,
- GfParmGetStr(results, path, RE_ATTR_NAME, ""));
- GfParmSetStr(results, path2, RE_ATTR_CAR,
- GfParmGetStr(results, path, RE_ATTR_CAR, ""));
- GfParmSetNum(results, path2, RE_ATTR_BEST_LAP_TIME, NULL,
- GfParmGetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, 0));
- GfParmSetStr(results, path2, RE_ATTR_MODULE,
- GfParmGetStr(results, path, RM_ATTR_MODULE, ""));
- GfParmSetNum(results, path2, RE_ATTR_IDX, NULL,
- GfParmGetNum(results, path, RM_ATTR_IDX, NULL, 0));
- GfParmSetNum(results, path2, RM_ATTR_EXTENDED, NULL,
- GfParmGetNum(results, path, RM_ATTR_EXTENDED, NULL, 0));
- GfParmSetStr(results, path2, ROB_ATTR_CAR,
- GfParmGetStr(results, path, ROB_ATTR_CAR, ""));
- GfParmSetStr(results, path2, ROB_ATTR_NAME,
- GfParmGetStr(results, path, ROB_ATTR_NAME, ""));
- snprintf(path, sizeof(path), "%s/%s/%d", race, RM_SECT_POINTS, i + 1);
- GfParmSetNum(results, path2, RE_ATTR_POINTS, NULL,
- GfParmGetNum(params, path, RE_ATTR_POINTS, NULL, 0));
- if (GfParmGetStr(results, path, RM_ATTR_SKINNAME, 0))
- GfParmSetStr(results, path2, RM_ATTR_SKINNAME,
- GfParmGetStr(results, path, RM_ATTR_SKINNAME, 0));
- GfParmSetNum(results, path2, RM_ATTR_SKINTARGETS, NULL,
- GfParmGetNum(results, path, RM_ATTR_SKINTARGETS, NULL, 0));
- } else {
- break;
- }
- }
- /* insert after */
- snprintf(path, sizeof(path), "%s/%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK, i + 1);
- GfParmSetStr(results, path, RE_ATTR_NAME, car->_name);
-
- snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
- carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
- carName = GfParmGetName(carparam);
-
- GfParmSetStr(results, path, RE_ATTR_CAR, carName);
- GfParmSetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, (tdble)car->_bestLapTime);
- GfParmSetStr(results, path, RE_ATTR_MODULE, car->_modName);
- GfParmSetNum(results, path, RE_ATTR_IDX, NULL, (tdble)car->_moduleIndex);
- GfParmSetStr(results, path, ROB_ATTR_CAR, car->_carName);
- GfParmSetStr(results, path, ROB_ATTR_NAME, car->_name);
- snprintf(path2, sizeof(path2), "%s/%d", RM_SECT_DRIVERS_RACING, car->index + 1 );
- GfParmSetNum(results, path, RM_ATTR_EXTENDED, NULL,
- GfParmGetNum(params, path2, RM_ATTR_EXTENDED, NULL, 0));
- snprintf(path2, sizeof(path2), "%s/%s/%d", race, RM_SECT_POINTS, i + 1);
- GfParmSetNum(results, path, RE_ATTR_POINTS, NULL,
- GfParmGetNum(params, path2, RE_ATTR_POINTS, NULL, 0));
- if (strlen(car->_skinName) > 0)
- GfParmSetStr(results, path, RM_ATTR_SKINNAME, car->_skinName);
- GfParmSetNum(results, path, RM_ATTR_SKINTARGETS, NULL, (tdble)car->_skinTargets);
-
- GfParmReleaseHandle(carparam);
- break;
- } else {
- car = s->cars[0];
-
- if (s->_totTime < 0.0f)
- GfLogWarning("Saving results of multicar non-race session, but it was not timed!\n" );
- snprintf(path, sizeof(path), "%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, race);
- GfParmListClean(results, path);
- GfParmSetNum(results, path, RE_ATTR_SESSIONTIME, NULL, (tdble)s->_totTime);
-
- for (i = 0; i < s->_ncars; i++) {
- snprintf(path, sizeof(path), "%s/%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK, i + 1);
- car = s->cars[i];
-
- GfParmSetStr(results, path, RE_ATTR_NAME, car->_name);
-
- snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
- carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
- carName = GfParmGetName(carparam);
-
- GfParmSetStr(results, path, RE_ATTR_CAR, carName);
- GfParmSetNum(results, path, RE_ATTR_INDEX, NULL, (tdble)car->index);
-
- GfParmSetNum(results, path, RE_ATTR_LAPS, NULL, (tdble)(car->_laps - 1));
- GfParmSetNum(results, path, RE_ATTR_TIME, NULL, (tdble)car->_curTime);
- GfParmSetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, (tdble)car->_bestLapTime);
- GfParmSetNum(results, path, RE_ATTR_TOP_SPEED, NULL, car->_topSpeed);
- GfParmSetNum(results, path, RE_ATTR_DAMMAGES, NULL, (tdble)car->_dammage);
- GfParmSetNum(results, path, RE_ATTR_NB_PIT_STOPS, NULL, (tdble)car->_nbPitStops);
-
- GfParmSetStr(results, path, RE_ATTR_MODULE, car->_modName);
- GfParmSetNum(results, path, RE_ATTR_IDX, NULL, (tdble)car->_moduleIndex);
- snprintf(path2, sizeof(path2), "%s/%d", RM_SECT_DRIVERS_RACING, car->index + 1 );
- GfParmSetNum(results, path, RM_ATTR_EXTENDED, NULL,
- GfParmGetNum(params, path2, RM_ATTR_EXTENDED, NULL, 0));
- GfParmSetStr(results, path, ROB_ATTR_CAR, car->_carName);
- snprintf(path2, sizeof(path2), "%s/%s/%d", race, RM_SECT_POINTS, i + 1);
- GfParmSetNum(results, path, RE_ATTR_POINTS, NULL,
- GfParmGetNum(params, path2, RE_ATTR_POINTS, NULL, 0));
- if (strlen(car->_skinName) > 0)
- GfParmSetStr(results, path, RM_ATTR_SKINNAME, car->_skinName);
- GfParmSetNum(results, path, RM_ATTR_SKINTARGETS, NULL, (tdble)car->_skinTargets);
-
- GfParmReleaseHandle(carparam);
- }
- break;
- }
- }
+ snprintf(path, sizeof(path), "%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, race);
+ GfParmListClean(results, path);
+ GfParmSetNum(results, path, RE_ATTR_LAPS, NULL, (tdble)(car->_laps - 1));
+
+ for (i = 0; i < s->_ncars; i++) {
+ snprintf(path, sizeof(path), "%s/%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK, i + 1);
+ car = s->cars[i];
+ if (car->_laps > s->_totLaps)
+ car->_laps = s->_totLaps + 1;
+
+ GfParmSetStr(results, path, RE_ATTR_NAME, car->_name);
+
+ snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
+ carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
+ carName = GfParmGetName(carparam);
+
+ GfParmSetStr(results, path, RE_ATTR_CAR, carName);
+ GfParmSetNum(results, path, RE_ATTR_INDEX, NULL, (tdble)car->index);
+
+ GfParmSetNum(results, path, RE_ATTR_LAPS, NULL, (tdble)(car->_laps - 1));
+ GfParmSetNum(results, path, RE_ATTR_TIME, NULL, (tdble)car->_curTime);
+ GfParmSetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, (tdble)car->_bestLapTime);
+ GfParmSetNum(results, path, RE_ATTR_TOP_SPEED, NULL, car->_topSpeed);
+ GfParmSetNum(results, path, RE_ATTR_DAMMAGES, NULL, (tdble)car->_dammage);
+ GfParmSetNum(results, path, RE_ATTR_NB_PIT_STOPS, NULL, (tdble)car->_nbPitStops);
+
+ GfParmSetStr(results, path, RE_ATTR_MODULE, car->_modName);
+ GfParmSetNum(results, path, RE_ATTR_IDX, NULL, (tdble)car->_moduleIndex);
+ snprintf(path2, sizeof(path2), "%s/%d", RM_SECT_DRIVERS_RACING, car->index + 1 );
+ GfParmSetNum(results, path, RM_ATTR_EXTENDED, NULL,
+ GfParmGetNum(params, path2, RM_ATTR_EXTENDED, NULL, 0));
+ GfParmSetStr(results, path, ROB_ATTR_CAR, car->_carName);
+ snprintf(path2, sizeof(path2), "%s/%s/%d", race, RM_SECT_POINTS, i + 1);
+ GfParmSetNum(results, path, RE_ATTR_POINTS, NULL,
+ GfParmGetNum(params, path2, RE_ATTR_POINTS, NULL, 0));
+ if (strlen(car->_skinName) > 0)
+ GfParmSetStr(results, path, RM_ATTR_SKINNAME, car->_skinName);
+ GfParmSetNum(results, path, RM_ATTR_SKINTARGETS, NULL, (tdble)car->_skinTargets);
+
+ GfParmReleaseHandle(carparam);
+ }
+ break;
+
+ case RM_TYPE_PRACTICE:
+ if (s->_ncars == 1)
+ {
+ car = s->cars[0];
+ snprintf(path, sizeof(path), "%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, race);
+ GfParmSetStr(results, path, RM_ATTR_DRVNAME, car->_name);
+ snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
+ carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
+ carName = GfParmGetName(carparam);
+ GfParmSetStr(results, path, RE_ATTR_CAR, carName);
+ GfParmReleaseHandle(carparam);
+ break;
+ }
+#if ( __GNUC__ >= 5 || _MSVC_VER >= 1910)
+ [[fallthrough]];
+#endif
+ /* Otherwise, fall through */
+
+ case RM_TYPE_QUALIF:
+ if (s->_ncars == 1)
+ {
+ car = s->cars[0];
+ snprintf(path, sizeof(path), "%s/%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK);
+ nCars = GfParmGetEltNb(results, path);
+ for (i = nCars; i > 0; i--) {
+ snprintf(path, sizeof(path), "%s/%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK, i);
+ float opponentBestLapTime = GfParmGetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, 0);
+
+ if (car->_bestLapTime != 0.0
+ && (car->_bestLapTime < opponentBestLapTime || opponentBestLapTime == 0.0))
+ {
+ /* shift */
+ snprintf(path2, sizeof(path2), "%s/%s/%s/%s/%d",
+ ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK, i + 1);
+ GfParmSetStr(results, path2, RE_ATTR_NAME,
+ GfParmGetStr(results, path, RE_ATTR_NAME, ""));
+ GfParmSetStr(results, path2, RE_ATTR_CAR,
+ GfParmGetStr(results, path, RE_ATTR_CAR, ""));
+ GfParmSetNum(results, path2, RE_ATTR_BEST_LAP_TIME, NULL,
+ GfParmGetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, 0));
+ GfParmSetStr(results, path2, RE_ATTR_MODULE,
+ GfParmGetStr(results, path, RM_ATTR_MODULE, ""));
+ GfParmSetNum(results, path2, RE_ATTR_IDX, NULL,
+ GfParmGetNum(results, path, RM_ATTR_IDX, NULL, 0));
+ GfParmSetNum(results, path2, RM_ATTR_EXTENDED, NULL,
+ GfParmGetNum(results, path, RM_ATTR_EXTENDED, NULL, 0));
+ GfParmSetStr(results, path2, ROB_ATTR_CAR,
+ GfParmGetStr(results, path, ROB_ATTR_CAR, ""));
+ GfParmSetStr(results, path2, ROB_ATTR_NAME,
+ GfParmGetStr(results, path, ROB_ATTR_NAME, ""));
+ snprintf(path, sizeof(path), "%s/%s/%d", race, RM_SECT_POINTS, i + 1);
+ GfParmSetNum(results, path2, RE_ATTR_POINTS, NULL,
+ GfParmGetNum(params, path, RE_ATTR_POINTS, NULL, 0));
+ if (GfParmGetStr(results, path, RM_ATTR_SKINNAME, 0))
+ GfParmSetStr(results, path2, RM_ATTR_SKINNAME,
+ GfParmGetStr(results, path, RM_ATTR_SKINNAME, 0));
+ GfParmSetNum(results, path2, RM_ATTR_SKINTARGETS, NULL,
+ GfParmGetNum(results, path, RM_ATTR_SKINTARGETS, NULL, 0));
+ } else {
+ break;
+ }
+ }
+ /* insert after */
+ snprintf(path, sizeof(path), "%s/%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK, i + 1);
+ GfParmSetStr(results, path, RE_ATTR_NAME, car->_name);
+
+ snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
+ carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
+ carName = GfParmGetName(carparam);
+
+ GfParmSetStr(results, path, RE_ATTR_CAR, carName);
+ GfParmSetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, (tdble)car->_bestLapTime);
+ GfParmSetStr(results, path, RE_ATTR_MODULE, car->_modName);
+ GfParmSetNum(results, path, RE_ATTR_IDX, NULL, (tdble)car->_moduleIndex);
+ GfParmSetStr(results, path, ROB_ATTR_CAR, car->_carName);
+ GfParmSetStr(results, path, ROB_ATTR_NAME, car->_name);
+ snprintf(path2, sizeof(path2), "%s/%d", RM_SECT_DRIVERS_RACING, car->index + 1 );
+ GfParmSetNum(results, path, RM_ATTR_EXTENDED, NULL,
+ GfParmGetNum(params, path2, RM_ATTR_EXTENDED, NULL, 0));
+ snprintf(path2, sizeof(path2), "%s/%s/%d", race, RM_SECT_POINTS, i + 1);
+ GfParmSetNum(results, path, RE_ATTR_POINTS, NULL,
+ GfParmGetNum(params, path2, RE_ATTR_POINTS, NULL, 0));
+ if (strlen(car->_skinName) > 0)
+ GfParmSetStr(results, path, RM_ATTR_SKINNAME, car->_skinName);
+ GfParmSetNum(results, path, RM_ATTR_SKINTARGETS, NULL, (tdble)car->_skinTargets);
+
+ GfParmReleaseHandle(carparam);
+ break;
+ } else {
+ car = s->cars[0];
+
+ if (s->_totTime < 0.0f)
+ GfLogWarning("Saving results of multicar non-race session, but it was not timed!\n" );
+ snprintf(path, sizeof(path), "%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, race);
+ GfParmListClean(results, path);
+ GfParmSetNum(results, path, RE_ATTR_SESSIONTIME, NULL, (tdble)s->_totTime);
+
+ for (i = 0; i < s->_ncars; i++) {
+ snprintf(path, sizeof(path), "%s/%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK, i + 1);
+ car = s->cars[i];
+
+ GfParmSetStr(results, path, RE_ATTR_NAME, car->_name);
+
+ snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
+ carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
+ carName = GfParmGetName(carparam);
+
+ GfParmSetStr(results, path, RE_ATTR_CAR, carName);
+ GfParmSetNum(results, path, RE_ATTR_INDEX, NULL, (tdble)car->index);
+
+ GfParmSetNum(results, path, RE_ATTR_LAPS, NULL, (tdble)(car->_laps - 1));
+ GfParmSetNum(results, path, RE_ATTR_TIME, NULL, (tdble)car->_curTime);
+ GfParmSetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, (tdble)car->_bestLapTime);
+ GfParmSetNum(results, path, RE_ATTR_TOP_SPEED, NULL, car->_topSpeed);
+ GfParmSetNum(results, path, RE_ATTR_DAMMAGES, NULL, (tdble)car->_dammage);
+ GfParmSetNum(results, path, RE_ATTR_NB_PIT_STOPS, NULL, (tdble)car->_nbPitStops);
+
+ GfParmSetStr(results, path, RE_ATTR_MODULE, car->_modName);
+ GfParmSetNum(results, path, RE_ATTR_IDX, NULL, (tdble)car->_moduleIndex);
+ snprintf(path2, sizeof(path2), "%s/%d", RM_SECT_DRIVERS_RACING, car->index + 1 );
+ GfParmSetNum(results, path, RM_ATTR_EXTENDED, NULL,
+ GfParmGetNum(params, path2, RM_ATTR_EXTENDED, NULL, 0));
+ GfParmSetStr(results, path, ROB_ATTR_CAR, car->_carName);
+ snprintf(path2, sizeof(path2), "%s/%s/%d", race, RM_SECT_POINTS, i + 1);
+ GfParmSetNum(results, path, RE_ATTR_POINTS, NULL,
+ GfParmGetNum(params, path2, RE_ATTR_POINTS, NULL, 0));
+ if (strlen(car->_skinName) > 0)
+ GfParmSetStr(results, path, RM_ATTR_SKINNAME, car->_skinName);
+ GfParmSetNum(results, path, RM_ATTR_SKINTARGETS, NULL, (tdble)car->_skinTargets);
+
+ GfParmReleaseHandle(carparam);
+ }
+ break;
+ }
+ }
}
void
ReInitCurRes()
{
- if (ReInfo->_displayMode != RM_DISP_MODE_NORMAL)
- {
- if (ReInfo->s->_raceType == RM_TYPE_QUALIF)
- {
- //ReUpdateQualifCurRes(ReInfo->s->cars[0]);
- }
- else if (ReInfo->s->_raceType == RM_TYPE_PRACTICE && ReInfo->s->_ncars > 1)
- {
- //ReUpdatePracticeCurRes(ReInfo->s->cars[0]);
- }
- else
- {
- static const char* pszTableHeader = "Rank Time Driver Car";
- char pszTitle[128];
- snprintf(pszTitle, sizeof(pszTitle), "%s at %s",
- ReInfo->_reRaceName, ReInfo->track->name);
- char pszSubTitle[128];
- snprintf(pszSubTitle, sizeof(pszSubTitle), "%s (%s)",
- ReInfo->s->cars[0]->_name, ReInfo->s->cars[0]->_carName);
- ReUI().setResultsTableTitles(pszTitle, pszSubTitle);
- ReUI().setResultsTableHeader(pszTableHeader);
- }
- }//if displayMode != normal
+ if (ReInfo->_displayMode != RM_DISP_MODE_NORMAL)
+ {
+ if (ReInfo->s->_raceType == RM_TYPE_QUALIF)
+ {
+ //ReUpdateQualifCurRes(ReInfo->s->cars[0]);
+ }
+ else if (ReInfo->s->_raceType == RM_TYPE_PRACTICE && ReInfo->s->_ncars > 1)
+ {
+ //ReUpdatePracticeCurRes(ReInfo->s->cars[0]);
+ }
+ else
+ {
+ static const char* pszTableHeader = "Rank Time Driver Car";
+ char pszTitle[128];
+ snprintf(pszTitle, sizeof(pszTitle), "%s at %s",
+ ReInfo->_reRaceName, ReInfo->track->name);
+ char pszSubTitle[128];
+ snprintf(pszSubTitle, sizeof(pszSubTitle), "%s (%s)",
+ ReInfo->s->cars[0]->_name, ReInfo->s->cars[0]->_carName);
+ ReUI().setResultsTableTitles(pszTitle, pszSubTitle);
+ ReUI().setResultsTableHeader(pszTableHeader);
+ }
+ }//if displayMode != normal
}
void
ReUpdatePracticeCurRes(tCarElt *car, bool bForceNew)
{
- if (bForceNew)
- {
- static const char* pszTableHeader =
- "Lap \tTime \tBest \tTop spd \tMin spd \tDamages";
- ReUI().setResultsTableHeader(pszTableHeader);
- char* t1 = GfTime2Str(car->_lastLapTime, 0, false, 3);
- char* t2 = GfTime2Str(car->_bestLapTime, 0, false, 3);
- char buf[128];
+ if (bForceNew)
+ {
+ static const char* pszTableHeader =
+ "Lap \tTime \tBest \tTop spd \tMin spd \tDamages";
+ ReUI().setResultsTableHeader(pszTableHeader);
+ char* t1 = GfTime2Str(car->_lastLapTime, 0, false, 3);
+ char* t2 = GfTime2Str(car->_bestLapTime, 0, false, 3);
+ char buf[128];
- // Cancel hightlight on first line
- if (car->_laps == 2) ReUI().setResultsTableRow(0, "");
+ // Cancel hightlight on first line
+ if (car->_laps == 2) ReUI().setResultsTableRow(0, "");
- tReCarInfo *info = &(ReInfo->_reCarInfo[car->index]);
- static int nLastLapDamages = 0;
- if (car->_laps <= 2)
- nLastLapDamages = 0;
- snprintf(buf, sizeof(buf), "%.3d \t%-12s \t%-12s \t%5.1f \t%5.1f \t %.5d (%d)",
- car->_laps - 1, t1, t2, info->topSpd * 3.6, info->botSpd * 3.6,
- car->_dammage ? car->_dammage - nLastLapDamages : 0, car->_dammage);
- nLastLapDamages = car->_dammage;
- free(t1);
- free(t2);
-
- ReUI().addResultsTableRow(buf);
- }
- else
- {
- //ReUpdateQualifCurRes(car);
- }
+ tReCarInfo *info = &(ReInfo->_reCarInfo[car->index]);
+ static int nLastLapDamages = 0;
+ if (car->_laps <= 2)
+ nLastLapDamages = 0;
+ snprintf(buf, sizeof(buf), "%.3d \t%-12s \t%-12s \t%5.1f \t%5.1f \t %.5d (%d)",
+ car->_laps - 1, t1, t2, info->topSpd * 3.6, info->botSpd * 3.6,
+ car->_dammage ? car->_dammage - nLastLapDamages : 0, car->_dammage);
+ nLastLapDamages = car->_dammage;
+ free(t1);
+ free(t2);
+
+ ReUI().addResultsTableRow(buf);
+ }
+ else
+ {
+ //ReUpdateQualifCurRes(car);
+ }
}
void
ReUpdateQualifCurRes(tCarElt *car)
{
- static const char* pszTableHeader = "Rank \tTime \tDriver \tCar";
- int i;
- int xx;
- int nCars;
- int nCarsReal;
- int printed;
- int maxLines;
- void *carparam;
- char *carName;
- const char *race = ReInfo->_reRaceName;
- void *results = ReInfo->results;
- char *tmp_str;
- double time_left;
-
- if (ReInfo->s->_ncars == 1)
- {
- ReUI().eraseResultsTable();
- maxLines = ReUI().getResultsTableRowCount();
-
- snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
- carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
- carName = GfParmGetName(carparam);
+ static const char* pszTableHeader = "Rank \tTime \tDriver \tCar";
+ int i;
+ int xx;
+ int nCars;
+ int nCarsReal;
+ int printed;
+ int maxLines;
+ void *carparam;
+ char *carName;
+ const char *race = ReInfo->_reRaceName;
+ void *results = ReInfo->results;
+ char *tmp_str;
+ double time_left;
- char pszTitle[128];
- snprintf(pszTitle, sizeof(pszTitle), "%s at %s",
- race, ReInfo->track->name);
- if (ReInfo->s->_raceType == RM_TYPE_PRACTICE || car->_laps < 1 || car->_laps > ReInfo->s->_totLaps)
- snprintf(buf, sizeof(buf), "%s (%s)", car->_name, carName);
- else
- snprintf(buf, sizeof(buf), "%s (%s) - Lap %d", car->_name, carName, car->_laps);
- ReUI().setResultsTableTitles(pszTitle, buf);
- ReUI().setResultsTableHeader(pszTableHeader);
+ if (ReInfo->s->_ncars == 1)
+ {
+ ReUI().eraseResultsTable();
+ maxLines = ReUI().getResultsTableRowCount();
- printed = 0;
- snprintf(path, sizeof(path), "%s/%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK);
- nCarsReal = GfParmGetEltNb(results, path);
- nCars = MIN(nCarsReal + 1, maxLines); // limit display to only those on 1st page
- for (i = 1; i < nCars; i++) {
- snprintf(path, sizeof(path), "%s/%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK, i);
- if (!printed && car->_bestLapTime != 0.0
- && car->_bestLapTime < GfParmGetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, 0)) {
- tmp_str = GfTime2Str(car->_bestLapTime, " ", false, 3);
- snprintf(buf, sizeof(buf), " %2d \t%-12s \t%-25s \t%-20s", i, tmp_str, car->_name, carName);
- free(tmp_str);
- ReUI().setResultsTableRow(i - 1, buf, /*highlight=*/true);
- printed = 1;
- }
- tmp_str = GfTime2Str(GfParmGetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, 0), " ", false, 3);
- snprintf(buf, sizeof(buf), " %2d \t%-12s \t%-25s \t%-20s",
- i + printed, tmp_str, GfParmGetStr(results, path, RE_ATTR_NAME, ""),
- GfParmGetStr(results, path, RE_ATTR_CAR, ""));
- free (tmp_str);
- ReUI().setResultsTableRow(i - 1 + printed, buf);
- }
-
- if (!printed) {
- tmp_str = GfTime2Str(car->_bestLapTime, " ", false, 3);
- snprintf(buf, sizeof(buf), " %2d \t%-12s \t%-25s \t%-20s", nCarsReal + 1, tmp_str, car->_name, carName);
- free(tmp_str);
- ReUI().setResultsTableRow(i - 1, buf, /*highlight=*/true);
- }
-
- GfParmReleaseHandle(carparam);
- }
- else
- {
- nCars = ReInfo->s->_ncars;
- if (nCars > ReUI().getResultsTableRowCount())
- nCars = ReUI().getResultsTableRowCount();
+ snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
+ carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
+ carName = GfParmGetName(carparam);
- char pszTitle[128];
- snprintf(pszTitle, sizeof(pszTitle), "%s at %s",
- race, ReInfo->track->name);
- if (ReInfo->s->_totTime > ReInfo->s->currentTime)
- {
- time_left = ReInfo->s->_totTime - ReInfo->s->currentTime;
- snprintf( buf, sizeof(buf), "%d:%02d:%02d",
- (int)floor( time_left / 3600.0f ), (int)floor( time_left / 60.0f ) % 60,
- (int)floor( time_left ) % 60 );
- }
- else
- {
- snprintf( buf, sizeof(buf), "%d laps", ReInfo->s->_totLaps );
- }
- ReUI().setResultsTableTitles(pszTitle, buf);
- ReUI().setResultsTableHeader(pszTableHeader);
-
- for (xx = 0; xx < nCars; ++xx) {
- car = ReInfo->s->cars[ xx ];
- snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
- carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
- carName = strdup(GfParmGetName(carparam));
- GfParmReleaseHandle(carparam);
-
- if (car->_state & RM_CAR_STATE_DNF) {
- snprintf(buf, sizeof(buf), "out \t \t%-25s \t%-20s", car->_name, carName);
- } else if (car->_bestLapTime <= 0.0f) {
- snprintf(buf, sizeof(buf), " %2d \t --:--- \t%-25s \t%-20s",
- xx + 1, car->_name, carName);
- } else {
- if (xx == 0)
- tmp_str = GfTime2Str(car->_bestLapTime, " ", false, 3);
- else
- tmp_str = GfTime2Str(car->_bestLapTime - ReInfo->s->cars[0]->_bestLapTime,
- "+", false, 3);
- snprintf(buf, sizeof(buf), " %2d \t%-12s \t%-25s \t%-20s",
- xx + 1, tmp_str, car->_name, carName);
- free(tmp_str);
- }
- ReUI().setResultsTableRow(xx, buf);
- FREEZ(carName);
- }
- }
+ char pszTitle[128];
+ snprintf(pszTitle, sizeof(pszTitle), "%s at %s",
+ race, ReInfo->track->name);
+ if (ReInfo->s->_raceType == RM_TYPE_PRACTICE || car->_laps < 1 || car->_laps > ReInfo->s->_totLaps)
+ snprintf(buf, sizeof(buf), "%s (%s)", car->_name, carName);
+ else
+ snprintf(buf, sizeof(buf), "%s (%s) - Lap %d", car->_name, carName, car->_laps);
+ ReUI().setResultsTableTitles(pszTitle, buf);
+ ReUI().setResultsTableHeader(pszTableHeader);
+
+ printed = 0;
+ snprintf(path, sizeof(path), "%s/%s/%s/%s", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK);
+ nCarsReal = GfParmGetEltNb(results, path);
+ nCars = MIN(nCarsReal + 1, maxLines); // limit display to only those on 1st page
+ for (i = 1; i < nCars; i++) {
+ snprintf(path, sizeof(path), "%s/%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, race, RE_SECT_RANK, i);
+ if (!printed && car->_bestLapTime != 0.0
+ && car->_bestLapTime < GfParmGetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, 0)) {
+ tmp_str = GfTime2Str(car->_bestLapTime, " ", false, 3);
+ snprintf(buf, sizeof(buf), " %2d \t%-12s \t%-25s \t%-20s", i, tmp_str, car->_name, carName);
+ free(tmp_str);
+ ReUI().setResultsTableRow(i - 1, buf, /*highlight=*/true);
+ printed = 1;
+ }
+ tmp_str = GfTime2Str(GfParmGetNum(results, path, RE_ATTR_BEST_LAP_TIME, NULL, 0), " ", false, 3);
+ snprintf(buf, sizeof(buf), " %2d \t%-12s \t%-25s \t%-20s",
+ i + printed, tmp_str, GfParmGetStr(results, path, RE_ATTR_NAME, ""),
+ GfParmGetStr(results, path, RE_ATTR_CAR, ""));
+ free (tmp_str);
+ ReUI().setResultsTableRow(i - 1 + printed, buf);
+ }
+
+ if (!printed) {
+ tmp_str = GfTime2Str(car->_bestLapTime, " ", false, 3);
+ snprintf(buf, sizeof(buf), " %2d \t%-12s \t%-25s \t%-20s", nCarsReal + 1, tmp_str, car->_name, carName);
+ free(tmp_str);
+ ReUI().setResultsTableRow(i - 1, buf, /*highlight=*/true);
+ }
+
+ GfParmReleaseHandle(carparam);
+ }
+ else
+ {
+ nCars = ReInfo->s->_ncars;
+ if (nCars > ReUI().getResultsTableRowCount())
+ nCars = ReUI().getResultsTableRowCount();
+
+ char pszTitle[128];
+ snprintf(pszTitle, sizeof(pszTitle), "%s at %s",
+ race, ReInfo->track->name);
+ if (ReInfo->s->_totTime > ReInfo->s->currentTime)
+ {
+ time_left = ReInfo->s->_totTime - ReInfo->s->currentTime;
+ snprintf( buf, sizeof(buf), "%d:%02d:%02d",
+ (int)floor( time_left / 3600.0f ), (int)floor( time_left / 60.0f ) % 60,
+ (int)floor( time_left ) % 60 );
+ }
+ else
+ {
+ snprintf( buf, sizeof(buf), "%d laps", ReInfo->s->_totLaps );
+ }
+ ReUI().setResultsTableTitles(pszTitle, buf);
+ ReUI().setResultsTableHeader(pszTableHeader);
+
+ for (xx = 0; xx < nCars; ++xx) {
+ car = ReInfo->s->cars[ xx ];
+ snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
+ carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
+ carName = strdup(GfParmGetName(carparam));
+ GfParmReleaseHandle(carparam);
+
+ if (car->_state & RM_CAR_STATE_DNF) {
+ snprintf(buf, sizeof(buf), "out \t \t%-25s \t%-20s", car->_name, carName);
+ } else if (car->_bestLapTime <= 0.0f) {
+ snprintf(buf, sizeof(buf), " %2d \t --:--- \t%-25s \t%-20s",
+ xx + 1, car->_name, carName);
+ } else {
+ if (xx == 0)
+ tmp_str = GfTime2Str(car->_bestLapTime, " ", false, 3);
+ else
+ tmp_str = GfTime2Str(car->_bestLapTime - ReInfo->s->cars[0]->_bestLapTime,
+ "+", false, 3);
+ snprintf(buf, sizeof(buf), " %2d \t%-12s \t%-25s \t%-20s",
+ xx + 1, tmp_str, car->_name, carName);
+ free(tmp_str);
+ }
+ ReUI().setResultsTableRow(xx, buf);
+ FREEZ(carName);
+ }
+ }
}
void
ReUpdateRaceCurRes()
{
- static const char* pszTableHeader = "Rank \tTime \tDriver \tCar";
+ static const char* pszTableHeader = "Rank \tTime \tDriver \tCar";
int ncars;
int xx;
void *carparam;
@@ -643,56 +646,56 @@ ReUpdateRaceCurRes()
if (ReInfo->s->_totTime > ReInfo->s->currentTime)
{
- time_left = ReInfo->s->_totTime - ReInfo->s->currentTime;
- snprintf( buf, sizeof(buf), "%d:%02d:%02d",
- (int)floor( time_left / 3600.0f ),
- (int)floor( time_left / 60.0f ) % 60, (int)floor( time_left ) % 60 );
+ time_left = ReInfo->s->_totTime - ReInfo->s->currentTime;
+ snprintf( buf, sizeof(buf), "%d:%02d:%02d",
+ (int)floor( time_left / 3600.0f ),
+ (int)floor( time_left / 60.0f ) % 60, (int)floor( time_left ) % 60 );
}
else
{
- snprintf( buf, sizeof(buf), "%d laps", ReInfo->s->_totLaps );
+ snprintf( buf, sizeof(buf), "%d laps", ReInfo->s->_totLaps );
}
- ReUI().setResultsTableTitles(pszTitle, buf);
- ReUI().setResultsTableHeader(pszTableHeader);
+ ReUI().setResultsTableTitles(pszTitle, buf);
+ ReUI().setResultsTableHeader(pszTableHeader);
for (xx = 0; xx < ncars; ++xx) {
- car = ReInfo->s->cars[ xx ];
+ car = ReInfo->s->cars[ xx ];
snprintf(buf, sizeof(buf), "cars/models/%s/%s.xml", car->_carName, car->_carName);
carparam = GfParmReadFile(buf, GFPARM_RMODE_STD);
carName = strdup(GfParmGetName(carparam));
GfParmReleaseHandle(carparam);
-
- if (car->_state & RM_CAR_STATE_DNF) {
- snprintf(buf, sizeof(buf), "out %-20s %-20s", car->_name, carName);
- } else if (car->_timeBehindLeader == 0.0f) {
- if (xx != 0)
- snprintf(buf, sizeof(buf), " %2d \t --:--- \t%-25s \t%-20s",
- xx + 1, car->_name, carName);
- else
- snprintf(buf, sizeof(buf), " %2d \t%3d laps \t%-25s \t%-20s",
- xx + 1, car->_laps - 1, car->_name, carName);
- } else {
- if (xx == 0) {
- snprintf(buf, sizeof(buf), " %2d \t%3d laps \t%-25s \t%-20s",
- xx + 1, car->_laps - 1, car->_name, carName);
- } else {
- if (car->_lapsBehindLeader == 0)
- {
- tmp_str = GfTime2Str(car->_timeBehindLeader, " ", false, 3);
- snprintf(buf, sizeof(buf), " %2d \t%-12s\t%-25s \t%-20s",
- xx + 1, tmp_str, car->_name, carName);
- free(tmp_str);
- }
- else if (car->_lapsBehindLeader == 1)
- snprintf(buf, sizeof(buf), " %2d \t 1 lap \t%-25s \t%-20s",
- xx + 1, car->_name, carName);
- else
- snprintf(buf, sizeof(buf), " %2d \t %3d laps \t%-25s \t%-20s",
- xx + 1, car->_lapsBehindLeader, car->_name, carName);
- }
- }
- ReUI().setResultsTableRow(xx, buf);
- FREEZ(carName);
+
+ if (car->_state & RM_CAR_STATE_DNF) {
+ snprintf(buf, sizeof(buf), "out %-20s %-20s", car->_name, carName);
+ } else if (car->_timeBehindLeader == 0.0f) {
+ if (xx != 0)
+ snprintf(buf, sizeof(buf), " %2d \t --:--- \t%-25s \t%-20s",
+ xx + 1, car->_name, carName);
+ else
+ snprintf(buf, sizeof(buf), " %2d \t%3d laps \t%-25s \t%-20s",
+ xx + 1, car->_laps - 1, car->_name, carName);
+ } else {
+ if (xx == 0) {
+ snprintf(buf, sizeof(buf), " %2d \t%3d laps \t%-25s \t%-20s",
+ xx + 1, car->_laps - 1, car->_name, carName);
+ } else {
+ if (car->_lapsBehindLeader == 0)
+ {
+ tmp_str = GfTime2Str(car->_timeBehindLeader, " ", false, 3);
+ snprintf(buf, sizeof(buf), " %2d \t%-12s\t%-25s \t%-20s",
+ xx + 1, tmp_str, car->_name, carName);
+ free(tmp_str);
+ }
+ else if (car->_lapsBehindLeader == 1)
+ snprintf(buf, sizeof(buf), " %2d \t 1 lap \t%-25s \t%-20s",
+ xx + 1, car->_name, carName);
+ else
+ snprintf(buf, sizeof(buf), " %2d \t %3d laps \t%-25s \t%-20s",
+ xx + 1, car->_lapsBehindLeader, car->_name, carName);
+ }
+ }
+ ReUI().setResultsTableRow(xx, buf);
+ FREEZ(carName);
}
}
@@ -706,7 +709,7 @@ ReSavePracticeLap(tCarElt *car)
/* hack to allow results from practice hillclimb to be recorded (as lap1) */
snprintf(path, sizeof(path), "%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, ReInfo->_reRaceName, 1);
GfParmSetNum(results, path, RE_ATTR_TIME, NULL, (tdble)car->_curTime);
- } else {
+ } else {
snprintf(path, sizeof(path), "%s/%s/%s/%d", ReInfo->track->name, RE_SECT_RESULTS, ReInfo->_reRaceName, car->_laps - 1);
GfParmSetNum(results, path, RE_ATTR_TIME, NULL, (tdble)car->_lastLapTime);
}
diff --git a/src/modules/racing/genparoptv1/racestate.cpp b/src/modules/racing/genparoptv1/racestate.cpp
index 0bed696b7..4b744234a 100644
--- a/src/modules/racing/genparoptv1/racestate.cpp
+++ b/src/modules/racing/genparoptv1/racestate.cpp
@@ -3,7 +3,7 @@
file : racestate.cpp
created : Sat Nov 16 12:00:42 CET 2002
copyright : (C) 2002 by Eric Espie
- email : eric.espie@torcs.org
+ email : eric.espie@torcs.org
version : $Id$
***************************************************************************/
@@ -16,8 +16,8 @@
* *
***************************************************************************/
-/** @file
- The Race Engine State Automaton
+/** @file
+ The Race Engine State Automaton
@author Eric Espie
@version $Id$
*/
@@ -52,197 +52,202 @@ ReStateInit(void *prevMenu)
void
ReStateManage(void)
{
- int mode = RM_SYNC | RM_NEXT_STEP;
+ int mode = RM_SYNC | RM_NEXT_STEP;
- do {
- switch (ReInfo->_reState) {
- case RE_STATE_CONFIG:
- GfLogInfo("%s now in CONFIG state\n", ReInfo->_reName);
- // Race configuration
- mode = ReConfigure();
- if (mode & RM_NEXT_STEP) {
- ReInfo->_reState = RE_STATE_EVENT_INIT;
- }
- break;
+ do
+ {
+ switch (ReInfo->_reState)
+ {
+ case RE_STATE_CONFIG:
+ GfLogInfo("%s now in CONFIG state\n", ReInfo->_reName);
+ // Race configuration
+ mode = ReConfigure();
+ if (mode & RM_NEXT_STEP) {
+ ReInfo->_reState = RE_STATE_EVENT_INIT;
+ }
+ break;
- case RE_STATE_EVENT_INIT:
- GfLogInfo("%s now in EVENT_INIT state\n", ReInfo->_reName);
- // Use new Memory Manager ...
- #ifdef __DEBUG_MEMORYMANAGER__
- //fprintf(stderr,"Initialise memory manager tracking ...\n");
- GfMemoryManagerSetGroup(1);
- #endif
- // ... Use new Memory Manager
+ case RE_STATE_EVENT_INIT:
+ GfLogInfo("%s now in EVENT_INIT state\n", ReInfo->_reName);
+ // Use new Memory Manager ...
+ #ifdef __DEBUG_MEMORYMANAGER__
+ //fprintf(stderr,"Initialise memory manager tracking ...\n");
+ GfMemoryManagerSetGroup(1);
+ #endif
+ // ... Use new Memory Manager
+#if ( __GNUC__ >= 5 || _MSVC_VER >= 1910)
+ [[fallthrough]];
+#endif
- case RE_STATE_EVENT_LOOP:
- GfLogInfo("%s now in EVENT_INIT_LOOP state\n", ReInfo->_reName);
- // Load the event description (track and drivers list)
- mode = ReRaceEventInit();
- if (mode & RM_NEXT_STEP) {
- ReInfo->_reState = RE_STATE_PRE_RACE;
- }
- break;
+ case RE_STATE_EVENT_LOOP:
+ GfLogInfo("%s now in EVENT_INIT_LOOP state\n", ReInfo->_reName);
+ // Load the event description (track and drivers list)
+ mode = ReRaceEventInit();
+ if (mode & RM_NEXT_STEP) {
+ ReInfo->_reState = RE_STATE_PRE_RACE;
+ }
+ break;
- case RE_STATE_PRE_RACE:
- GfLogInfo("%s now in PRE_RACE state\n", ReInfo->_reName);
- mode = RePreRace();
- if (mode & RM_NEXT_RACE) {
- if (mode & RM_NEXT_STEP) {
- ReInfo->_reState = RE_STATE_EVENT_SHUTDOWN;
- }
- } else if (mode & RM_NEXT_STEP) {
- ReInfo->_reState = RE_STATE_RACE_START;
- }
- break;
+ case RE_STATE_PRE_RACE:
+ GfLogInfo("%s now in PRE_RACE state\n", ReInfo->_reName);
+ mode = RePreRace();
+ if (mode & RM_NEXT_RACE) {
+ if (mode & RM_NEXT_STEP) {
+ ReInfo->_reState = RE_STATE_EVENT_SHUTDOWN;
+ }
+ } else if (mode & RM_NEXT_STEP) {
+ ReInfo->_reState = RE_STATE_RACE_START;
+ }
+ break;
- case RE_STATE_RACE_START:
- GfLogInfo("%s now in RACE_START state\n", ReInfo->_reName);
- mode = ReRaceStart();
- if (mode & RM_NEXT_STEP) {
- ReInfo->_reState = RE_STATE_RACE;
- GfLogInfo("%s now in RACE state\n", ReInfo->_reName);
- }
- break;
+ case RE_STATE_RACE_START:
+ GfLogInfo("%s now in RACE_START state\n", ReInfo->_reName);
+ mode = ReRaceStart();
+ if (mode & RM_NEXT_STEP) {
+ ReInfo->_reState = RE_STATE_RACE;
+ GfLogInfo("%s now in RACE state\n", ReInfo->_reName);
+ }
+ break;
- case RE_STATE_RACE:
- mode = ReUpdate();
- if (ReInfo->s->_raceState == RM_RACE_ENDED) {
- // Race is finished
- ReInfo->_reState = RE_STATE_RACE_END;
- } else if (mode & RM_END_RACE) {
- // Race was interrupted (paused) by the player
- ReInfo->_reState = RE_STATE_RACE_STOP;
- }
- break;
+ case RE_STATE_RACE:
+ mode = ReUpdate();
+ if (ReInfo->s->_raceState == RM_RACE_ENDED) {
+ // Race is finished
+ ReInfo->_reState = RE_STATE_RACE_END;
+ } else if (mode & RM_END_RACE) {
+ // Race was interrupted (paused) by the player
+ ReInfo->_reState = RE_STATE_RACE_STOP;
+ }
+ break;
- case RE_STATE_RACE_STOP:
- GfLogInfo("%s now in RACE_STOP state\n", ReInfo->_reName);
- // Race was interrupted (paused) by the player
- mode = ReRaceStop();
- if (mode & RM_NEXT_STEP) {
- ReInfo->_reState = RE_STATE_RACE_END;
- }
- break;
+ case RE_STATE_RACE_STOP:
+ GfLogInfo("%s now in RACE_STOP state\n", ReInfo->_reName);
+ // Race was interrupted (paused) by the player
+ mode = ReRaceStop();
+ if (mode & RM_NEXT_STEP) {
+ ReInfo->_reState = RE_STATE_RACE_END;
+ }
+ break;
- case RE_STATE_RACE_END:
- GfLogInfo("%s now in RACE_END state\n", ReInfo->_reName);
- mode = ReRaceEnd();
- if (mode & RM_NEXT_STEP) {
- ReInfo->_reState = RE_STATE_POST_RACE;
- } else if (mode & RM_NEXT_RACE) {
- ReInfo->_reState = RE_STATE_RACE_START;
- }
- break;
+ case RE_STATE_RACE_END:
+ GfLogInfo("%s now in RACE_END state\n", ReInfo->_reName);
+ mode = ReRaceEnd();
+ if (mode & RM_NEXT_STEP) {
+ ReInfo->_reState = RE_STATE_POST_RACE;
+ } else if (mode & RM_NEXT_RACE) {
+ ReInfo->_reState = RE_STATE_RACE_START;
+ }
+ break;
- case RE_STATE_POST_RACE:
- GfLogInfo("%s now in POST_RACE state\n", ReInfo->_reName);
- mode = RePostRace();
- if (mode & RM_NEXT_STEP) {
- ReInfo->_reState = RE_STATE_EVENT_SHUTDOWN;
- } else if (mode & RM_NEXT_RACE) {
- ReInfo->_reState = RE_STATE_PRE_RACE;
- }
- break;
+ case RE_STATE_POST_RACE:
+ GfLogInfo("%s now in POST_RACE state\n", ReInfo->_reName);
+ mode = RePostRace();
+ if (mode & RM_NEXT_STEP) {
+ ReInfo->_reState = RE_STATE_EVENT_SHUTDOWN;
+ } else if (mode & RM_NEXT_RACE) {
+ ReInfo->_reState = RE_STATE_PRE_RACE;
+ }
+ break;
- case RE_STATE_EVOLUTION:
- GfLogInfo("RaceEngine: state = RE_STATE_EVOLUTION\n");
- mode = ReEvolution();
- // Setup short cut
- if (mode & RM_NEXT_STEP) {
- /* Back to optimization */
- ReInfo->_reState = RE_STATE_EVENT_LOOP;
- } else {
- /* Next step */
- // Use new Memory Manager ...
- #ifdef __DEBUG_MEMORYMANAGER__
- fprintf(stderr,"... Reset memory manager tracking\n");
- GfMemoryManagerSetGroup(0);
- #endif
- // ... Use new Memory Manager
+ case RE_STATE_EVOLUTION:
+ GfLogInfo("RaceEngine: state = RE_STATE_EVOLUTION\n");
+ mode = ReEvolution();
+ // Setup short cut
+ if (mode & RM_NEXT_STEP) {
+ /* Back to optimization */
+ ReInfo->_reState = RE_STATE_EVENT_LOOP;
+ } else {
+ /* Next step */
+ // Use new Memory Manager ...
+ #ifdef __DEBUG_MEMORYMANAGER__
+ fprintf(stderr,"... Reset memory manager tracking\n");
+ GfMemoryManagerSetGroup(0);
+ #endif
+ // ... Use new Memory Manager
- ReInfo->_reState = RE_STATE_SHUTDOWN;
- }
- break;
+ ReInfo->_reState = RE_STATE_SHUTDOWN;
+ }
+ break;
- case RE_STATE_EVENT_SHUTDOWN:
- GfLogInfo("%s now in EVENT_SHUTDOWN state\n", ReInfo->_reName);
- mode = ReRaceEventShutdown();
- if (mode & RM_NEXT_STEP) {
- ReInfo->_reState = RE_STATE_EVOLUTION;
- } else if (mode & RM_NEXT_RACE) {
- ReInfo->_reState = RE_STATE_EVENT_INIT;
- }
- break;
+ case RE_STATE_EVENT_SHUTDOWN:
+ GfLogInfo("%s now in EVENT_SHUTDOWN state\n", ReInfo->_reName);
+ mode = ReRaceEventShutdown();
+ if (mode & RM_NEXT_STEP) {
+ ReInfo->_reState = RE_STATE_EVOLUTION;
+ } else if (mode & RM_NEXT_RACE) {
+ ReInfo->_reState = RE_STATE_EVENT_INIT;
+ }
+ break;
- case RE_STATE_SHUTDOWN:
- GfLogInfo("%s now in SHUTDOWN state\n", ReInfo->_reName);
- ReCleanupGeneticOptimisation();
- ReInfo->_reState = RE_STATE_RESULTS;
- mode = RM_SYNC;
- break;
+ case RE_STATE_SHUTDOWN:
+ GfLogInfo("%s now in SHUTDOWN state\n", ReInfo->_reName);
+ ReCleanupGeneticOptimisation();
+ ReInfo->_reState = RE_STATE_RESULTS;
+ mode = RM_SYNC;
+ break;
- case RE_STATE_RESULTS:
- GfLogInfo("%s now in RESULTS state\n", ReInfo->_reName);
- ReDisplayResults();
- ReInfo->_reState = RE_STATE_CLEANUP;
- mode = RM_SYNC;
- break;
+ case RE_STATE_RESULTS:
+ GfLogInfo("%s now in RESULTS state\n", ReInfo->_reName);
+ ReDisplayResults();
+ ReInfo->_reState = RE_STATE_CLEANUP;
+ mode = RM_SYNC;
+ break;
- case RE_STATE_CLEANUP:
- GfLogInfo("%s now in CLEANUP state\n", ReInfo->_reName);
- ReCleanupReInfo();
- // Back to the race manager menu
- ReInfo->_reState = RE_STATE_WAITFORKEYPRESS;
- mode = RM_SYNC;
- break;
+ case RE_STATE_CLEANUP:
+ GfLogInfo("%s now in CLEANUP state\n", ReInfo->_reName);
+ ReCleanupReInfo();
+ // Back to the race manager menu
+ ReInfo->_reState = RE_STATE_WAITFORKEYPRESS;
+ mode = RM_SYNC;
+ break;
- case RE_STATE_WAITFORKEYPRESS:
- GfLogInfo("%s now in WAITFORKEYPRESS state\n", ReInfo->_reName);
- mode = ReWaitForKeyPress();
- if (mode & RM_NEXT_STEP){
- ReInfo->_reState = RE_STATE_CONFIG;
- } else {
- ReInfo->_reState = RE_STATE_WAITFORKEYPRESS;
- }
- mode = RM_SYNC;
- break;
+ case RE_STATE_WAITFORKEYPRESS:
+ GfLogInfo("%s now in WAITFORKEYPRESS state\n", ReInfo->_reName);
+ mode = ReWaitForKeyPress();
+ if (mode & RM_NEXT_STEP){
+ ReInfo->_reState = RE_STATE_CONFIG;
+ } else {
+ ReInfo->_reState = RE_STATE_WAITFORKEYPRESS;
+ }
+ mode = RM_SYNC;
+ break;
- case RE_STATE_ERROR:
- // If this state is set, there was a serious error:
- // i.e. no driver in the race (no one selected OR parameters out of range)
- // Error messages are normally dumped in the game trace stream !
- // TODO: Define another screen showing the error messages instead of
- // only having it in the console window!
- GfLogInfo("%s now in ERROR state\n", ReInfo->_reName);
- ReCleanupGeneticOptimisation();
- // Back to race manager menu
- ReInfo->_reState = RE_STATE_CONFIG;
- mode = RM_SYNC;
- break;
+ case RE_STATE_ERROR:
+ // If this state is set, there was a serious error:
+ // i.e. no driver in the race (no one selected OR parameters out of range)
+ // Error messages are normally dumped in the game trace stream !
+ // TODO: Define another screen showing the error messages instead of
+ // only having it in the console window!
+ GfLogInfo("%s now in ERROR state\n", ReInfo->_reName);
+ ReCleanupGeneticOptimisation();
+ // Back to race manager menu
+ ReInfo->_reState = RE_STATE_CONFIG;
+ mode = RM_SYNC;
+ break;
- case RE_STATE_EXIT:
- // Exit the race engine.
- mode = ReExit();
- break;
- }
+ case RE_STATE_EXIT:
+ // Exit the race engine.
+ mode = ReExit();
+ break;
+ }
- if (mode & RM_ERROR) {
- GfLogError("Race engine error (see above messages)\n");
- ReInfo->_reState = RE_STATE_ERROR;
- mode = RM_SYNC;
- }
+ if (mode & RM_ERROR) {
+ GfLogError("Race engine error (see above messages)\n");
+ ReInfo->_reState = RE_STATE_ERROR;
+ mode = RM_SYNC;
+ }
- //GfLogDebug("ReStateManage : New state 0x%X, %sing.\n",
- // ReInfo->_reState, (mode & RM_SYNC) ? "loop" : "return");
-
- } while (mode & RM_SYNC);
+ //GfLogDebug("ReStateManage : New state 0x%X, %sing.\n",
+ // ReInfo->_reState, (mode & RM_SYNC) ? "loop" : "return");
+
+ } while (mode & RM_SYNC);
}
// Change and Execute a New State
void
ReStateApply(void *pvState)
{
- ReInfo->_reState = (int)(long)pvState;
+ ReInfo->_reState = (int)(long)pvState;
- ReStateManage();
+ ReStateManage();
}
diff --git a/src/tools/trackgen/main.cpp b/src/tools/trackgen/main.cpp
index ff28a2393..51c2318df 100644
--- a/src/tools/trackgen/main.cpp
+++ b/src/tools/trackgen/main.cpp
@@ -17,8 +17,8 @@
* *
***************************************************************************/
-/** @file
-
+/** @file
+
@author Eric Espie
@version $Id$
*/
@@ -106,17 +106,17 @@ class Application : public GfApplication
{
public:
- //! Constructor.
- Application();
+ //! Constructor.
+ Application();
//! Initialization.
virtual void initialize(bool bLoggingEnabled, int argc = 0, char **argv = 0);
//! Parse the command line options.
- // TODO: Move to the GfApplication way of parsing options ?
- bool parseOptions();
-
- void generate();
+ // TODO: Move to the GfApplication way of parsing options ?
+ bool parseOptions();
+
+ void generate();
};
//! Constructor.
@@ -127,33 +127,33 @@ Application::Application()
void Application::initialize(bool bLoggingEnabled, int argc, char **argv)
{
- // Base initialization first.
- GfApplication::initialize(bLoggingEnabled, argc, argv);
-
- // Specific options.
- registerOption("c", "category", /* nHasValue = */ true);
- registerOption("n", "name", /* nHasValue = */ true);
- registerOption("b", "bump", /* nHasValue = */ false);
- registerOption("r", "raceline", /* nHasValue = */ false);
- registerOption("B", "noborder", /* nHasValue = */ false);
- registerOption("a", "all", /* nHasValue = */ false);
- registerOption("z", "calc", /* nHasValue = */ false);
- registerOption("s", "split", /* nHasValue = */ false);
- registerOption("S", "splitall", /* nHasValue = */ false);
- registerOption("E", "saveelev", /* nHasValue = */ true);
- registerOption("H", "height4", /* nHasValue = */ true);
+ // Base initialization first.
+ GfApplication::initialize(bLoggingEnabled, argc, argv);
+
+ // Specific options.
+ registerOption("c", "category", /* nHasValue = */ true);
+ registerOption("n", "name", /* nHasValue = */ true);
+ registerOption("b", "bump", /* nHasValue = */ false);
+ registerOption("r", "raceline", /* nHasValue = */ false);
+ registerOption("B", "noborder", /* nHasValue = */ false);
+ registerOption("a", "all", /* nHasValue = */ false);
+ registerOption("z", "calc", /* nHasValue = */ false);
+ registerOption("s", "split", /* nHasValue = */ false);
+ registerOption("S", "splitall", /* nHasValue = */ false);
+ registerOption("E", "saveelev", /* nHasValue = */ true);
+ registerOption("H", "height4", /* nHasValue = */ true);
+
+ // Help on specific options.
+ addOptionsHelpSyntaxLine("-c|--category -n|--name [-b|bump] [-r|--raceline] [-B|--noborder]");
+ addOptionsHelpSyntaxLine("[-a|--all] [-z|--calc] [-s|split] [-S|splitall]");
+ addOptionsHelpSyntaxLine("[-E|--saveelev <#ef> [-H|height4 <#hs>]]");
- // Help on specific options.
- addOptionsHelpSyntaxLine("-c|--category -n|--name [-b|bump] [-r|--raceline] [-B|--noborder]");
- addOptionsHelpSyntaxLine("[-a|--all] [-z|--calc] [-s|split] [-S|splitall]");
- addOptionsHelpSyntaxLine("[-E|--saveelev <#ef> [-H|height4 <#hs>]]");
-
addOptionsHelpExplainLine(" : track category (road, speedway, dirt...)");
addOptionsHelpExplainLine(" : track name");
addOptionsHelpExplainLine("bump : draw bump track");
- addOptionsHelpExplainLine("raceline : draw raceline track\n");
+ addOptionsHelpExplainLine("raceline : draw raceline track\n");
addOptionsHelpExplainLine("noborder : don't use terrain border "
- "(relief supplied int clockwise, ext CC)");
+ "(relief supplied int clockwise, ext CC)");
addOptionsHelpExplainLine("all : draw all (default is track only)");
addOptionsHelpExplainLine("calc : only calculate track parameters and exit");
addOptionsHelpExplainLine("split : split the track and the terrain");
@@ -170,228 +170,237 @@ void Application::initialize(bool bLoggingEnabled, int argc, char **argv)
// Parse the command line options.
bool Application::parseOptions()
{
- // Parse command line for registered options, and interpret standard ones.
- if (!GfApplication::parseOptions())
- return false;
+ // Parse command line for registered options, and interpret standard ones.
+ if (!GfApplication::parseOptions())
+ return false;
- // Then interpret the specific ones.
- TrackName = NULL;
- TrackCategory = NULL;
+ // Then interpret the specific ones.
+ TrackName = NULL;
+ TrackCategory = NULL;
TrackOnly = 1;
- JustCalculate = 0;
+ JustCalculate = 0;
MergeAll = 1;
MergeTerrain = 1;
DoSaveElevation = -1;
- std::list