From 06f9d3e8d764f2ff98de99f3a93b7766a903b557 Mon Sep 17 00:00:00 2001 From: kakukri Date: Tue, 1 Nov 2011 19:57:00 +0000 Subject: [PATCH] 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 --- src/libs/raceengine/racemain.cpp | 28 +++++++++++-------- .../legacymenu/racescreens/raceparamsmenu.cpp | 12 ++++---- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/libs/raceengine/racemain.cpp b/src/libs/raceengine/racemain.cpp index 721de9a8d..0389c4ec7 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 27389db0b..e6292cb0c 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");