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:
parent
f836484bf4
commit
06f9d3e8d7
2 changed files with 23 additions and 17 deletions
|
@ -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);
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in a new issue