Highscores are now displayed in the track screen

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3951 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2009-08-29 18:12:31 +00:00
parent 0db37d90fb
commit 870c470eab
7 changed files with 66 additions and 6 deletions

View File

@ -143,7 +143,7 @@ void FollowTheLeaderRace::restartRace()
*/
std::string FollowTheLeaderRace::getIdent() const
{
return "FOLLOW_LEADER";
return FTL_IDENT;
}
//-----------------------------------------------------------------------------
RaceGUI::KartIconDisplayInfo* FollowTheLeaderRace::getKartsDisplayInfo()

View File

@ -25,6 +25,7 @@ class FollowTheLeaderRace : public LinearWorld
{
std::vector<float> m_leader_intervals; // time till elimination in follow leader
public:
FollowTheLeaderRace();
virtual ~FollowTheLeaderRace();

View File

@ -123,7 +123,8 @@ bool StandardRace::haveBonusBoxes()
std::string StandardRace::getIdent() const
{
if(race_manager->getMinorMode() == RaceManager::MINOR_MODE_TIME_TRIAL)
return "STD_TIMETRIAL";
return IDENT_TTRIAL;
else
return "STANDARD";
return IDENT_STD;
} // getIdent

View File

@ -129,7 +129,7 @@ void ThreeStrikesBattle::kartHit(const int kart_id)
*/
std::string ThreeStrikesBattle::getIdent() const
{
return "BATTLE_3_STRIKES";
return STRIKES_IDENT;
} // getIdent
//-----------------------------------------------------------------------------

View File

@ -39,6 +39,7 @@ class ThreeStrikesBattle : public World
std::vector<BattleInfo> m_kart_info;
public:
ThreeStrikesBattle();
virtual ~ThreeStrikesBattle();

View File

@ -87,6 +87,25 @@ public:
MINOR_MODE_3_STRIKES = BATTLE_ARENA(0)
};
// Stupid C++ doesn't accept string constants
#define IDENT_STD "STANDARD"
#define IDENT_TTRIAL "STD_TIMETRIAL"
#define FTL_IDENT "FOLLOW_LEADER"
#define STRIKES_IDENT "BATTLE_3_STRIKES"
static const char* getIdentOf(const MinorRaceModeType mode)
{
switch (mode)
{
case MINOR_MODE_QUICK_RACE: return IDENT_STD;
case MINOR_MODE_TIME_TRIAL: return IDENT_TTRIAL;
case MINOR_MODE_FOLLOW_LEADER: return FTL_IDENT;
case MINOR_MODE_3_STRIKES: return STRIKES_IDENT;
default: assert(false); return NULL;
}
}
#undef LINEAR_RACE
#undef BATTLE_ARENA

View File

@ -19,6 +19,8 @@
#include "guiengine/engine.hpp"
#include "guiengine/widget.hpp"
#include "network/network_manager.hpp"
#include "race/highscores.hpp"
#include "race/highscore_manager.hpp"
#include "race/race_manager.hpp"
#include "states_screens/dialogs/track_info_dialog.hpp"
#include "states_screens/state_manager.hpp"
@ -74,9 +76,45 @@ TrackInfoDialog::TrackInfoDialog(const std::string& trackIdent, const char* trac
m_irrlicht_window);
a->setTabStop(false);
// ======== High Scores
std::string game_mode_ident = RaceManager::getIdentOf( race_manager->getMinorMode() );
const HighscoreEntry::HighscoreType type = "HST_" + game_mode_ident;
HighscoreEntry* highscores = highscore_manager->getHighscoreEntry(type,
race_manager->getNumKarts(),
race_manager->getDifficulty(),
trackIdent,
race_manager->getNumLaps());
// TODO: update highscores display when number of laps changes
const int amount = highscores->getNumberEntries();
stringw highscores_string = "= Highscores =\n";
std::cout << "====== Highscores =====\n";
std::cout << "Checking for highscores of type " << type.c_str() << " with nkarts=" << race_manager->getNumKarts()
<< ", difficulty=" << race_manager->getDifficulty() << ", track=" << trackIdent.c_str()
<< ", nlaps=" << race_manager->getNumLaps() << std::endl;
std::cout << "Got " << amount << " entries\n";
std::string kart_name;
std::string name;
float time;
char buffer[512];
for (int n=0; n<amount; n++)
{
highscores->getEntry(n, kart_name, name, &time);
sprintf(buffer, "%s (%s) : %.2f\n", kart_name.c_str(), name.c_str(), time);
std::cout << buffer << std::endl;
highscores_string += buffer;
}
std::cout << "======================\n";
core::rect< s32 > area_left(0, y1, m_area.getWidth()/2, y2);
IGUIStaticText* b = GUIEngine::getGUIEnv()->addStaticText( stringw(_("High Scores & Track Info")).c_str(),
IGUIStaticText* b = GUIEngine::getGUIEnv()->addStaticText( highscores_string.c_str(),
area_left, false , true , // border, word warp
m_irrlicht_window);
b->setTabStop(false);