Fix tracks not showing in grandprix info (#4561)

Tell user grandprix is not available if it includes locked tracks in singleplayer
This commit is contained in:
Kuba 2021-07-24 19:26:56 +02:00 committed by GitHub
parent 6673e3cc48
commit 2264ca6faa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 5 deletions

View File

@ -515,6 +515,12 @@ irr::core::stringw GrandPrixData::getTrackName(const unsigned int track) const
assert(t != NULL);
return t->getName();
} // getTrackName
// ----------------------------------------------------------------------------
bool GrandPrixData::containsUnavailableTracks() const
{
return getNumberOfTracks() < getNumberOfTracks(true);
} // containsUnavailableTracks
// ----------------------------------------------------------------------------
const std::string& GrandPrixData::getTrackId(const unsigned int track) const

View File

@ -136,6 +136,7 @@ public:
bool isEditable() const;
const std::string& getTrackId(const unsigned int track) const;
irr::core::stringw getTrackName(const unsigned int track) const;
bool containsUnavailableTracks() const;
unsigned int getLaps(const unsigned int track) const;
bool getReverse(const unsigned int track) const;
void moveUp(const unsigned int track);

View File

@ -135,7 +135,7 @@ void GPInfoScreen::beforeAddingWidget()
RaceManager::get()->getMinorMode(),
RaceManager::get()->getNumLocalPlayers());
int tracks = (int)m_gp.getTrackNames().size();
int tracks = (int)m_gp.getTrackNames(true).size();
bool continue_visible = saved_gp && saved_gp->getNextTrack() > 0 &&
saved_gp->getNextTrack() < tracks;
@ -263,7 +263,7 @@ void GPInfoScreen::init()
*/
void GPInfoScreen::addTracks()
{
const std::vector<std::string> tracks = m_gp.getTrackNames();
const std::vector<std::string> tracks = m_gp.getTrackNames(true);
ListWidget *list = getWidget<ListWidget>("tracks");
list->clear();

View File

@ -30,6 +30,7 @@
#include "states_screens/state_manager.hpp"
#include "states_screens/track_info_screen.hpp"
#include "states_screens/gp_info_screen.hpp"
#include "states_screens/dialogs/message_dialog.hpp"
#include "tracks/track.hpp"
#include "tracks/track_manager.hpp"
#include "utils/string_utils.hpp"
@ -102,9 +103,17 @@ void TracksAndGPScreen::eventCallback(Widget* widget, const std::string& name,
}
else
{
GPInfoScreen *gpis = GPInfoScreen::getInstance();
gpis->setGP(selection);
gpis->push();
const GrandPrixData* gp_data=grand_prix_manager->getGrandPrix(selection);
if(gp_data->containsUnavailableTracks() && RaceManager::get()->getNumLocalPlayers()==1)
{
new MessageDialog(_("You cannot play this grandprix because it contains tracks that aren't unlocked!"));
}
else
{
GPInfoScreen *gpis = GPInfoScreen::getInstance();
gpis->setGP(selection);
gpis->push();
}
}
}
else if (name == "rand-gp")