diff --git a/src/libs/raceengine/racemain.cpp b/src/libs/raceengine/racemain.cpp index 721de9a8..0389c4ec 100644 --- a/src/libs/raceengine/racemain.cpp +++ b/src/libs/raceengine/racemain.cpp @@ -184,6 +184,7 @@ RePreRace(void) void *params = ReInfo->params; void *results = ReInfo->results; int curRaceIdx; + int laps; raceName = ReInfo->_reRaceName = ReGetCurrentRaceName(); @@ -211,27 +212,30 @@ RePreRace(void) return RM_SYNC | RM_NEXT_RACE | RM_NEXT_STEP; } - dist = GfParmGetNum(params, raceName, RM_ATTR_DISTANCE, NULL, 0); - if (dist < 0.001) { - ReInfo->s->_totLaps = (int)GfParmGetNum(params, raceName, RM_ATTR_LAPS, NULL, 30); - } else { - ReInfo->s->_totLaps = ((int)(dist / ReInfo->track->length)) + 1; - } - ReInfo->s->_totTime = GfParmGetNum(params, raceName, RM_ATTR_SESSIONTIME, NULL, -60.0f); ReInfo->s->_maxDammage = (int)GfParmGetNum(params, raceName, RM_ATTR_MAX_DMG, NULL, 10000); - ReInfo->s->_extraLaps = ReInfo->s->_totLaps; - + ReInfo->s->_extraLaps = 0; + ReInfo->s->_totLaps = 30; /* Make sure it is initialized */ + ReInfo->s->_totTime = GfParmGetNum(params, raceName, RM_ATTR_SESSIONTIME, NULL, -60.0f); if (ReInfo->s->_totTime > 0.0f && ( ReInfo->s->_features & RM_FEATURE_TIMEDSESSION ) == 0 ) { /* Timed session not supported: add 2 km for every minute */ - ReInfo->s->_totLaps += (int)floor(ReInfo->s->_totTime * 2000.0f / ReInfo->track->length + 0.5f); + ReInfo->s->_totLaps = (int)floor(ReInfo->s->_totTime * 2000.0f / ReInfo->track->length + 0.5f); ReInfo->s->_totTime = -60.0f; } - if (ReInfo->s->_totTime <= 0.0f) { ReInfo->s->_totTime = -60.0f; /* Make sure that if no time is set, the set is far below zero */ - ReInfo->s->_extraLaps = 0; + dist = GfParmGetNum(params, raceName, RM_ATTR_DISTANCE, NULL, 0.0); + if (dist >= 0.001) { + ReInfo->s->_totLaps = ((int)(dist / ReInfo->track->length)) + 1; + } + laps = (int)GfParmGetNum(params, raceName, RM_ATTR_LAPS, NULL, (tdble)ReInfo->s->_totLaps); + if (laps > 0 ) { + ReInfo->s->_totLaps = laps; + } + } + else { + ReInfo->s->_totLaps = 0; } raceType = GfParmGetStr(params, raceName, RM_ATTR_TYPE, RM_VAL_RACE); diff --git a/src/modules/userinterface/legacymenu/racescreens/raceparamsmenu.cpp b/src/modules/userinterface/legacymenu/racescreens/raceparamsmenu.cpp index 27389db0..e6292cb0 100644 --- a/src/modules/userinterface/legacymenu/racescreens/raceparamsmenu.cpp +++ b/src/modules/userinterface/legacymenu/racescreens/raceparamsmenu.cpp @@ -384,15 +384,17 @@ RmRaceParamsMenu(void *vrp) rmrpDuration = 0; // Default value. else rmrpDuration = pRaceSessionParams->nDuration; - if (rmrpDuration > 0 && !(rmrpFeatures & RM_FEATURE_TIMEDSESSION)) - rmrpDistance += rmrpDuration / 30; + if (rmrpDuration > 0 && !(rmrpFeatures & RM_FEATURE_TIMEDSESSION) && rmrpDistance == 0) + rmrpDistance = rmrpDuration / 30; if (pRaceSessionParams->nLaps < 0) rmrpLaps = 0; // Default value. - else + else { rmrpLaps = pRaceSessionParams->nLaps; - if (rmrpDistance == 0 && rmrpDuration > 0 && !(rmrpFeatures & RM_FEATURE_TIMEDSESSION)) - rmrpLaps += (int)floor((tdble)rmrpDuration / 1.5f + 0.5f); + if (rmrpLaps > 0) rmrpDistance = 0; + } + if (rmrpDistance == 0 && rmrpLaps == 0 && rmrpDuration == 0) + rmrpLaps = 1; // Create Race distance label. GfuiMenuCreateLabelControl(ScrHandle, menuXMLDescHdle, "distancelabel");