Save more detailed informations about reverse mode in GP highscores (#4616)
This commit is contained in:
@@ -1271,13 +1271,10 @@ Highscores* World::getHighscores() const
|
||||
// ---------------------------------------------------------------------------
|
||||
Highscores* World::getGPHighscores() const
|
||||
{
|
||||
const Highscores::HighscoreType type = "HST_GRANDPRIX";
|
||||
Highscores* highscores = highscore_manager->getHighscores(type,
|
||||
RaceManager::get()->getNumNonGhostKarts(),
|
||||
RaceManager::get()->getDifficulty(),
|
||||
RaceManager::get()->getGrandPrix().getId(),
|
||||
0,
|
||||
RaceManager::get()->getGrandPrix().getReverseType() == GrandPrixData::GP_ALL_REVERSE);
|
||||
Highscores* highscores = highscore_manager->getGPHighscores(RaceManager::get()->getNumNonGhostKarts(),
|
||||
RaceManager::get()->getDifficulty(),
|
||||
RaceManager::get()->getGrandPrix().getId(),
|
||||
RaceManager::get()->getGrandPrix().getReverseType());
|
||||
return highscores;
|
||||
}
|
||||
|
||||
|
||||
@@ -629,5 +629,23 @@ irr::core::stringw GrandPrixData::getName() const
|
||||
{
|
||||
return m_editable ? m_name.c_str() : _(m_name.c_str());
|
||||
}
|
||||
// ----------------------------------------------------------------------------
|
||||
irr::core::stringw GrandPrixData::reverseTypeToString(GPReverseType reverse_type)
|
||||
{
|
||||
switch (reverse_type)
|
||||
{
|
||||
case GrandPrixData::GP_DEFAULT_REVERSE:
|
||||
return _("Default");
|
||||
case GrandPrixData::GP_NO_REVERSE:
|
||||
return _("None");
|
||||
case GrandPrixData::GP_ALL_REVERSE:
|
||||
return _("All");
|
||||
case GrandPrixData::GP_RANDOM_REVERSE:
|
||||
return _("Random");
|
||||
default:
|
||||
return "N/A";
|
||||
}
|
||||
return "N/A";
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
||||
@@ -169,6 +169,7 @@ public:
|
||||
const { return m_reverse_type; }
|
||||
static const char* getRandomGPID() { return "random"; }
|
||||
static irr::core::stringw getRandomGPName();
|
||||
static irr::core::stringw reverseTypeToString(GPReverseType reverse_type);
|
||||
}; // GrandPrixData
|
||||
|
||||
#endif
|
||||
|
||||
@@ -201,3 +201,27 @@ Highscores* HighscoreManager::getHighscores(const Highscores::HighscoreType &hig
|
||||
m_all_scores.push_back(std::unique_ptr<Highscores>(highscores));
|
||||
return highscores;
|
||||
} // getHighscores
|
||||
// -----------------------------------------------------------------------------
|
||||
Highscores* HighscoreManager::getGPHighscores(int num_karts,
|
||||
const RaceManager::Difficulty difficulty,
|
||||
const std::string &trackName,
|
||||
GrandPrixData::GPReverseType reverse_type)
|
||||
{
|
||||
Highscores *highscores = 0;
|
||||
|
||||
// See if we already have a record for this type
|
||||
for (auto& hs : m_all_scores)
|
||||
{
|
||||
if (hs->matches(num_karts, difficulty, trackName, reverse_type))
|
||||
{
|
||||
// we found one entry for this kind of race, return it
|
||||
return hs.get();
|
||||
}
|
||||
} // for i in m_all_scores
|
||||
|
||||
// we don't have an entry for such a race currently. Create one.
|
||||
highscores = new Highscores(num_karts, difficulty,
|
||||
trackName, reverse_type);
|
||||
m_all_scores.push_back(std::unique_ptr<Highscores>(highscores));
|
||||
return highscores;
|
||||
} // get
|
||||
|
||||
@@ -59,6 +59,12 @@ public:
|
||||
const int number_of_laps,
|
||||
const bool reverse);
|
||||
// ------------------------------------------------------------------------
|
||||
/** getHighscores method for grandprix highscores */
|
||||
Highscores *getGPHighscores(int num_karts,
|
||||
const RaceManager::Difficulty difficulty,
|
||||
const std::string &trackName,
|
||||
GrandPrixData::GPReverseType reverse_type);
|
||||
// ------------------------------------------------------------------------
|
||||
void deleteHighscores(int i) { m_all_scores.erase
|
||||
(m_all_scores.begin() + i); }
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
@@ -44,6 +44,27 @@ Highscores::Highscores(const HighscoreType &highscore_type,
|
||||
m_difficulty = difficulty;
|
||||
m_number_of_laps = number_of_laps;
|
||||
m_reverse = reverse;
|
||||
m_gp_reverse_type = (int)GrandPrixData::GP_DEFAULT_REVERSE;
|
||||
|
||||
for(int i=0; i<HIGHSCORE_LEN; i++)
|
||||
{
|
||||
m_name[i] = "";
|
||||
m_kart_name[i] = "";
|
||||
m_time[i] = -9.9f;
|
||||
}
|
||||
}
|
||||
// ----------------------------------------------------------------------------
|
||||
Highscores::Highscores(int num_karts, const RaceManager::Difficulty &difficulty,
|
||||
const std::string &track_name,
|
||||
const GrandPrixData::GPReverseType reverse_type)
|
||||
{
|
||||
m_track = track_name;
|
||||
m_highscore_type = "HST_GRANDPRIX";
|
||||
m_number_of_karts = num_karts;
|
||||
m_difficulty = difficulty;
|
||||
m_number_of_laps = 0;
|
||||
m_reverse = false;
|
||||
m_gp_reverse_type = reverse_type;
|
||||
|
||||
for(int i=0; i<HIGHSCORE_LEN; i++)
|
||||
{
|
||||
@@ -61,6 +82,7 @@ Highscores::Highscores(const XMLNode &node)
|
||||
m_difficulty = -1;
|
||||
m_number_of_laps = 0;
|
||||
m_reverse = false;
|
||||
m_gp_reverse_type = (int)GrandPrixData::GP_DEFAULT_REVERSE;
|
||||
|
||||
for(int i=0; i<HIGHSCORE_LEN; i++)
|
||||
{
|
||||
@@ -81,9 +103,16 @@ void Highscores::readEntry(const XMLNode &node)
|
||||
node.get("hscore-type", &hst );
|
||||
m_highscore_type = (HighscoreType)hst;
|
||||
node.get("difficulty", &m_difficulty );
|
||||
node.get("number-of-laps", &m_number_of_laps );
|
||||
node.get("reverse", &m_reverse );
|
||||
|
||||
if (hst == "HST_GRANDPRIX")
|
||||
{
|
||||
m_number_of_laps = 0;
|
||||
node.get("reverse-type", &m_gp_reverse_type);
|
||||
}
|
||||
else
|
||||
{
|
||||
node.get("number-of-laps", &m_number_of_laps);
|
||||
node.get("reverse", &m_reverse);
|
||||
}
|
||||
for(unsigned int i=0; i<node.getNumNodes(); i++)
|
||||
{
|
||||
if (i >= HIGHSCORE_LEN)
|
||||
@@ -128,8 +157,12 @@ void Highscores::writeEntry(UTFWriter &writer)
|
||||
writer << " number-karts =\"" << m_number_of_karts << "\"\n";
|
||||
writer << " difficulty =\"" << m_difficulty << "\"\n";
|
||||
writer << " hscore-type =\"" << m_highscore_type.c_str() << "\"\n";
|
||||
writer << " number-of-laps=\"" << m_number_of_laps << "\"\n";
|
||||
writer << " reverse =\"" << m_reverse << "\">\n";
|
||||
if (m_highscore_type != "HST_GRANDPRIX")
|
||||
writer << " number-of-laps=\"" << m_number_of_laps << "\"\n";
|
||||
if (m_highscore_type == "HST_GRANDPRIX")
|
||||
writer << " reverse-type=\"" << m_gp_reverse_type << "\">\n";
|
||||
else
|
||||
writer << " reverse =\"" << m_reverse << "\">\n";
|
||||
|
||||
for(int i=0; i<HIGHSCORE_LEN; i++)
|
||||
{
|
||||
@@ -158,6 +191,18 @@ int Highscores::matches(const HighscoreType &highscore_type,
|
||||
m_number_of_karts == num_karts &&
|
||||
m_reverse == reverse );
|
||||
} // matches
|
||||
// -----------------------------------------------------------------------------
|
||||
int Highscores::matches(int num_karts,
|
||||
const RaceManager::Difficulty &difficulty,
|
||||
const std::string &track,
|
||||
const GrandPrixData::GPReverseType reverse_type)
|
||||
{
|
||||
return (m_highscore_type == "HST_GRANDPRIX" &&
|
||||
m_track == track &&
|
||||
m_difficulty == difficulty &&
|
||||
m_number_of_karts == num_karts &&
|
||||
m_gp_reverse_type == reverse_type );
|
||||
}
|
||||
|
||||
int Highscores::findHighscorePosition(const std::string& kart_name,
|
||||
const core::stringw& name, const float time)
|
||||
@@ -223,7 +268,7 @@ int Highscores::addGPData(const std::string& kart_name,
|
||||
m_number_of_karts = RaceManager::get()->getNumNonGhostKarts();
|
||||
m_difficulty = RaceManager::get()->getDifficulty();
|
||||
m_number_of_laps = 0;
|
||||
m_reverse = RaceManager::get()->getReverseTrack();
|
||||
m_gp_reverse_type = RaceManager::get()->getGrandPrix().getReverseType();
|
||||
m_name[position] = name;
|
||||
m_time[position] = time;
|
||||
m_kart_name[position] = kart_name;
|
||||
|
||||
@@ -60,6 +60,7 @@ public:
|
||||
int m_difficulty;
|
||||
int m_number_of_laps;
|
||||
bool m_reverse;
|
||||
int m_gp_reverse_type;
|
||||
|
||||
private:
|
||||
std::array<std::string, HIGHSCORE_LEN> m_kart_name;
|
||||
@@ -81,6 +82,10 @@ public:
|
||||
int num_karts, const RaceManager::Difficulty &difficulty,
|
||||
const std::string &trackName, const int number_of_laps,
|
||||
const bool reverse);
|
||||
/** Constructor for grandprix highscores */
|
||||
Highscores (int num_karts, const RaceManager::Difficulty &difficulty,
|
||||
const std::string &trackName,
|
||||
const GrandPrixData::GPReverseType reverse_type);
|
||||
/** Creates an entry from a file
|
||||
*/
|
||||
Highscores (const XMLNode &node);
|
||||
@@ -94,6 +99,12 @@ public:
|
||||
const std::string &track, const int number_of_laps,
|
||||
const bool reverse);
|
||||
// ------------------------------------------------------------------------
|
||||
/** matches method for grandprix highscores */
|
||||
int matches(int num_karts,
|
||||
const RaceManager::Difficulty &difficulty,
|
||||
const std::string &track,
|
||||
const GrandPrixData::GPReverseType reverse_type);
|
||||
// ------------------------------------------------------------------------
|
||||
int addData (const std::string& kart_name,
|
||||
const irr::core::stringw& name, const float time);
|
||||
int addGPData (const std::string& kart_name,
|
||||
|
||||
@@ -126,9 +126,17 @@ HighScoreInfoDialog::HighScoreInfoDialog(Highscores* highscore, bool is_linear,
|
||||
m_num_laps_label->setVisible(true);
|
||||
m_num_laps_label->setText(_("Laps: %d", m_hs->m_number_of_laps), true);
|
||||
}
|
||||
stringw is_reverse = m_hs->m_reverse ? _("Yes") : _("No");
|
||||
m_reverse_label->setVisible(true);
|
||||
m_reverse_label->setText(_("Reverse: %s", is_reverse), true);
|
||||
stringw is_reverse;
|
||||
if (m_major_mode == RaceManager::MAJOR_MODE_GRAND_PRIX)
|
||||
{
|
||||
is_reverse = GrandPrixData::reverseTypeToString((GrandPrixData::GPReverseType)m_hs->m_gp_reverse_type);
|
||||
}
|
||||
else
|
||||
{
|
||||
is_reverse = m_hs->m_reverse ? _("Yes") : _("No");
|
||||
}
|
||||
m_reverse_label->setVisible(true);
|
||||
m_reverse_label->setText(_("Reverse: %s", is_reverse), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -468,12 +468,11 @@ void GPInfoScreen::updateHighscores()
|
||||
if(m_gp.isRandomGP())
|
||||
return;
|
||||
const Highscores::HighscoreType type = "HST_GRANDPRIX";
|
||||
Highscores* highscores = highscore_manager->getHighscores(type,
|
||||
RaceManager::get()->getNumberOfKarts(),
|
||||
RaceManager::get()->getDifficulty(),
|
||||
m_gp.getId(),
|
||||
0,
|
||||
getReverse() == GrandPrixData::GP_ALL_REVERSE);
|
||||
Highscores* highscores = highscore_manager->getGPHighscores(
|
||||
RaceManager::get()->getNumberOfKarts(),
|
||||
RaceManager::get()->getDifficulty(),
|
||||
m_gp.getId(),
|
||||
getReverse());
|
||||
m_highscore_list->clear();
|
||||
int count = highscores->getNumberEntries();
|
||||
std::string kart;
|
||||
|
||||
@@ -242,8 +242,16 @@ void HighScoreSelection::loadList()
|
||||
row.push_back(GUIEngine::ListWidget::ListCell
|
||||
(StringUtils::toWString(hs->m_number_of_laps), -1, 3, true));
|
||||
}
|
||||
if (m_major_mode == RaceManager::MAJOR_MODE_GRAND_PRIX)
|
||||
{
|
||||
row.push_back(GUIEngine::ListWidget::ListCell(
|
||||
GrandPrixData::reverseTypeToString((GrandPrixData::GPReverseType)hs->m_gp_reverse_type), -1, 3, true));
|
||||
}
|
||||
else
|
||||
{
|
||||
row.push_back(GUIEngine::ListWidget::ListCell
|
||||
(hs->m_reverse ? _("Yes") : _("No"), -1, 3, true));
|
||||
}
|
||||
}
|
||||
m_high_scores_list_widget->addItem(StringUtils::toString(i), row);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user