Re #491: improve the race distance deciding logic

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@4030 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: d807d3251ecc3451a439c5221808dd1b734b82f3
Former-commit-id: 8475cb10f251f26b2d4bc0da7cc2867434dd4738
This commit is contained in:
kakukri 2011-11-01 19:57:00 +00:00
parent f836484bf4
commit 06f9d3e8d7
2 changed files with 23 additions and 17 deletions

View file

@ -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);

View file

@ -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");