From c8724632e85b62d985c741ce3ee6f10cf81e3989 Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 2 Sep 2014 16:40:26 +1000 Subject: [PATCH] Bugfix: only allow races (i.e. no arenas, or cut scenes) in an 'all tracks' random GP. --- src/race/grand_prix_data.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/race/grand_prix_data.cpp b/src/race/grand_prix_data.cpp index b4d058e15..f23c26987 100644 --- a/src/race/grand_prix_data.cpp +++ b/src/race/grand_prix_data.cpp @@ -90,26 +90,27 @@ void GrandPrixData::changeTrackNumber(const unsigned int number_of_tracks, // The problem with the track groups is that "all" isn't a track group // TODO: Add "all" to the track groups and rewrite this more elegant std::vector track_indices; - size_t available_tracks; if (track_group == "all") { - available_tracks = track_manager->getNumberOfTracks(); + for(unsigned int i=0; igetNumberOfTracks(); i++) + { + const Track *track = track_manager->getTrack(i); + if(!track->isArena() && !track->isSoccer() && !track->isInternal()) + track_indices.push_back(i); + } } else { track_indices = track_manager->getTracksInGroup(track_group); - available_tracks = track_indices.size(); } - assert(number_of_tracks <= available_tracks); + assert(number_of_tracks <= track_indices.size()); // add or remove the right number of tracks if (m_tracks.size() < number_of_tracks) { while (m_tracks.size() < number_of_tracks) { - int index = (track_group == "all") ? - rand() % available_tracks : - track_indices[rand() % available_tracks]; + int index = track_indices[rand() % track_indices.size()]; const Track *track = track_manager->getTrack(index); std::string id = track->getIdent();