better encapsulation of race modes. not the most elegant solution possible, but it was quick and easy, and will be easy to extend
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/trunk/supertuxkart@2334 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
e93129a520
commit
e6a257a7e2
@ -120,7 +120,7 @@ GrandPrixEnd::GrandPrixEnd()
|
|||||||
for(unsigned int i=start; i < NUM_KARTS; ++i)
|
for(unsigned int i=start; i < NUM_KARTS; ++i)
|
||||||
{
|
{
|
||||||
char sTime[20];sTime[0]=0;
|
char sTime[20];sTime[0]=0;
|
||||||
if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_FOLLOW_LEADER)
|
if(race_manager->getWorld()->getClockMode()==CHRONO)
|
||||||
TimeToString(race_time[i], sTime);
|
TimeToString(race_time[i], sTime);
|
||||||
sprintf((char*)(m_score + MAX_STR_LEN * i), "%d. %s %d %s",
|
sprintf((char*)(m_score + MAX_STR_LEN * i), "%d. %s %d %s",
|
||||||
i + 1-start, race_manager->getKartName(position[i]).c_str(), scores[i], sTime );
|
i + 1-start, race_manager->getKartName(position[i]).c_str(), scores[i], sTime );
|
||||||
@ -131,7 +131,7 @@ GrandPrixEnd::GrandPrixEnd()
|
|||||||
widget_manager->setWgtText(WTOK_FIRSTKART + i,
|
widget_manager->setWgtText(WTOK_FIRSTKART + i,
|
||||||
(char*)(m_score + MAX_STR_LEN * i));
|
(char*)(m_score + MAX_STR_LEN * i));
|
||||||
widget_manager->setWgtTextSize(WTOK_FIRSTKART + i, WGT_FNT_SML);
|
widget_manager->setWgtTextSize(WTOK_FIRSTKART + i, WGT_FNT_SML);
|
||||||
widget_manager->breakLine();
|
widget_manager->breakLine();
|
||||||
}
|
}
|
||||||
const std::string KART_NAME = race_manager->getKartName(position[start]);
|
const std::string KART_NAME = race_manager->getKartName(position[start]);
|
||||||
const KartProperties* WINNING_KART = kart_properties_manager->getKart(KART_NAME);
|
const KartProperties* WINNING_KART = kart_properties_manager->getKart(KART_NAME);
|
||||||
|
@ -110,7 +110,7 @@ RaceOptions::RaceOptions()
|
|||||||
// Number of laps
|
// Number of laps
|
||||||
// ==============
|
// ==============
|
||||||
if( race_manager->getMajorMode() != RaceManager::MAJOR_MODE_GRAND_PRIX &&
|
if( race_manager->getMajorMode() != RaceManager::MAJOR_MODE_GRAND_PRIX &&
|
||||||
race_manager->getMinorMode() != RaceManager::MINOR_MODE_FOLLOW_LEADER )
|
RaceManager::modeHasLaps( race_manager->getMinorMode() ) )
|
||||||
{
|
{
|
||||||
widget_manager->addTextWgt( WTOK_LAPS_TITLE, DESC_WIDTH, 7, _("Number of laps") );
|
widget_manager->addTextWgt( WTOK_LAPS_TITLE, DESC_WIDTH, 7, _("Number of laps") );
|
||||||
widget_manager->hideWgtRect(WTOK_LAPS_TITLE);
|
widget_manager->hideWgtRect(WTOK_LAPS_TITLE);
|
||||||
@ -271,7 +271,7 @@ void RaceOptions::select()
|
|||||||
race_manager->setNumKarts(m_num_karts);
|
race_manager->setNumKarts(m_num_karts);
|
||||||
|
|
||||||
if( race_manager->getMajorMode() != RaceManager::MAJOR_MODE_GRAND_PRIX &&
|
if( race_manager->getMajorMode() != RaceManager::MAJOR_MODE_GRAND_PRIX &&
|
||||||
race_manager->getMinorMode() != RaceManager::MINOR_MODE_FOLLOW_LEADER )
|
RaceManager::modeHasLaps( race_manager->getMinorMode() ) )
|
||||||
{
|
{
|
||||||
race_manager->setNumLaps( m_num_laps );
|
race_manager->setNumLaps( m_num_laps );
|
||||||
}
|
}
|
||||||
|
@ -70,14 +70,25 @@ public:
|
|||||||
MAJOR_MODE_GRAND_PRIX,
|
MAJOR_MODE_GRAND_PRIX,
|
||||||
MAJOR_MODE_SINGLE
|
MAJOR_MODE_SINGLE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// quick method to tell the difference between battle modes and race modes
|
||||||
|
// think of it like a bitmask, but done in decimal to avoid endianness issues
|
||||||
|
#define LINEAR_RACE(ID, COUNT_LAPSES) (1000+ID+100*COUNT_LAPSES)
|
||||||
|
#define BATTLE_ARENA(ID) (2000+ID)
|
||||||
/** Minor variants to the major types of race.
|
/** Minor variants to the major types of race.
|
||||||
*/
|
* Make sure to use the 'LINEAR_RACE/BATTLE_ARENA' macros
|
||||||
|
*/
|
||||||
enum MinorRaceModeType
|
enum MinorRaceModeType
|
||||||
{
|
{
|
||||||
MINOR_MODE_QUICK_RACE,
|
MINOR_MODE_QUICK_RACE = LINEAR_RACE(0, true),
|
||||||
MINOR_MODE_TIME_TRIAL,
|
MINOR_MODE_TIME_TRIAL = LINEAR_RACE(1, true),
|
||||||
MINOR_MODE_FOLLOW_LEADER
|
MINOR_MODE_FOLLOW_LEADER = LINEAR_RACE(2, false),
|
||||||
|
|
||||||
|
MINOR_MODE_LAST_ALIVE = BATTLE_ARENA(0)
|
||||||
};
|
};
|
||||||
|
#undef LINEAR_RACE
|
||||||
|
#undef BATTLE_ARENA
|
||||||
|
|
||||||
/** Difficulty. Atm skidding is implemented as a special difficulty. */
|
/** Difficulty. Atm skidding is implemented as a special difficulty. */
|
||||||
enum Difficulty { RD_EASY, RD_MEDIUM, RD_HARD, RD_SKIDDING };
|
enum Difficulty { RD_EASY, RD_MEDIUM, RD_HARD, RD_SKIDDING };
|
||||||
|
|
||||||
@ -210,6 +221,36 @@ public:
|
|||||||
void next(); // start the next race or go back to the start screen
|
void next(); // start the next race or go back to the start screen
|
||||||
void rerunRace(); // Rerun the same race again
|
void rerunRace(); // Rerun the same race again
|
||||||
void exit_race(); // exit a race (and don't start the next one)
|
void exit_race(); // exit a race (and don't start the next one)
|
||||||
|
|
||||||
|
/** get information about given mode (returns true if 'mode' is of linear races type)
|
||||||
|
info is stored in its ID for conveniance, see the macros above for exact meaning
|
||||||
|
*/
|
||||||
|
static bool isLinearRaceMode(const MinorRaceModeType type)
|
||||||
|
{
|
||||||
|
const int id = (int)type;
|
||||||
|
if(id > 999 && id < 2000) return true;
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
/** get information about given mode (returns true if 'mode' is of battle type)
|
||||||
|
info is stored in its ID for conveniance, see the macros above for exact meaning
|
||||||
|
*/
|
||||||
|
static bool isBattleMode(const MinorRaceModeType type)
|
||||||
|
{
|
||||||
|
const int id = (int)type;
|
||||||
|
if(id >= 2000) return true;
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
/** get information about given mode (returns true if 'mode' requires lap counting)
|
||||||
|
info is stored in its ID for conveniance, see the macros above for exact meaning
|
||||||
|
*/
|
||||||
|
static bool modeHasLaps(const MinorRaceModeType type)
|
||||||
|
{
|
||||||
|
if(isBattleMode(type)) return false;
|
||||||
|
const int id = (int)type;
|
||||||
|
const int answer = (id-1000)/100;
|
||||||
|
return (bool)answer;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern RaceManager *race_manager;
|
extern RaceManager *race_manager;
|
||||||
|
Loading…
Reference in New Issue
Block a user