Changed m_grand_prix of RaceManager to be an object (and not a pointer to

an object) anymore, which fixes a memory leak (and I also reverted my quick
fix from last night de7ceb0c2d6e31a25651993e77cd945e1b3bb126 to fix a crash,
which now not necessary anymore.
This commit is contained in:
hiker 2014-07-08 13:20:53 +10:00
parent 887438a0d0
commit 32707b8f88
5 changed files with 19 additions and 20 deletions

View File

@ -458,7 +458,7 @@ bool ChallengeData::isGPFulfilled() const
// is no world objects to query at this stage.
if (race_manager->getMajorMode() != RaceManager::MAJOR_MODE_GRAND_PRIX ||
race_manager->getMinorMode() != m_minor ||
race_manager->getGrandPrix()->getId() != m_gp_id ||
race_manager->getGrandPrix().getId() != m_gp_id ||
race_manager->getNumberOfKarts() < (unsigned int)m_num_karts[d] ||
race_manager->getNumPlayers() > 1) return false;

View File

@ -847,7 +847,7 @@ int handleCmdLine()
if(CommandLine::has("--gp", &s))
{
race_manager->setMajorMode(RaceManager::MAJOR_MODE_GRAND_PRIX);
GrandPrixData *gp = grand_prix_manager->getGrandPrix(s);
const GrandPrixData *gp = grand_prix_manager->getGrandPrix(s);
if (!gp)
{

View File

@ -75,7 +75,6 @@ RaceManager::RaceManager()
setTrack("jungle");
m_default_ai_list.clear();
setNumLocalPlayers(0);
m_grand_prix = new GrandPrixData();
} // RaceManager
//-----------------------------------------------------------------------------
@ -284,9 +283,9 @@ void RaceManager::startNew(bool from_overworld)
if(m_major_mode==MAJOR_MODE_GRAND_PRIX)
{
// GP: get tracks, laps and reverse info from grand prix
m_tracks = m_grand_prix->getTrackNames();
m_num_laps = m_grand_prix->getLaps();
m_reverse_track = m_grand_prix->getReverse();
m_tracks = m_grand_prix.getTrackNames();
m_num_laps = m_grand_prix.getLaps();
m_reverse_track = m_grand_prix.getReverse();
}
//assert(m_player_karts.size() > 0);
@ -349,7 +348,7 @@ void RaceManager::startNew(bool from_overworld)
SavedGrandPrix* gp = SavedGrandPrix::getSavedGP( StateManager::get()
->getActivePlayerProfile(0)
->getUniqueID(),
m_grand_prix->getId(),
m_grand_prix.getId(),
m_difficulty,
m_num_karts,
m_player_karts.size());
@ -500,7 +499,7 @@ void RaceManager::next()
SavedGrandPrix::getSavedGP(StateManager::get()
->getActivePlayerProfile(0)
->getUniqueID(),
m_grand_prix->getId(),
m_grand_prix.getId(),
m_difficulty,
m_num_karts,
m_player_karts.size());
@ -517,7 +516,7 @@ void RaceManager::next()
new SavedGrandPrix(
StateManager::get()->getActivePlayerProfile(0)
->getUniqueID(),
m_grand_prix->getId(),
m_grand_prix.getId(),
m_difficulty,
m_player_karts.size(),
m_track_number,
@ -636,7 +635,7 @@ void RaceManager::exitRace(bool delete_world)
SavedGrandPrix::getSavedGP(StateManager::get()
->getActivePlayerProfile(0)
->getUniqueID(),
m_grand_prix->getId(),
m_grand_prix.getId(),
m_difficulty,
m_num_karts,
m_player_karts.size());
@ -768,7 +767,7 @@ void RaceManager::rerunRace()
//-----------------------------------------------------------------------------
void RaceManager::startGP(GrandPrixData* gp, bool from_overworld,
void RaceManager::startGP(const GrandPrixData* gp, bool from_overworld,
bool continue_saved_gp)
{
assert(gp != NULL);

View File

@ -324,7 +324,7 @@ private:
* same list of AIs is used for all tracks of a GP. */
std::vector<std::string> m_ai_kart_list;
int m_track_number;
GrandPrixData* m_grand_prix;
GrandPrixData m_grand_prix;
int m_num_karts;
unsigned int m_num_finished_karts;
unsigned int m_num_finished_players;
@ -410,9 +410,9 @@ public:
void setDifficulty(Difficulty diff);
// ------------------------------------------------------------------------
void setGrandPrix(GrandPrixData* gp)
void setGrandPrix(const GrandPrixData *gp)
{
m_grand_prix = gp;
m_grand_prix = *gp;
m_coin_target = 0;
}
// ------------------------------------------------------------------------
@ -525,7 +525,7 @@ public:
// ------------------------------------------------------------------------
const std::string& getTrackName() const { return m_tracks[m_track_number];}
// ------------------------------------------------------------------------
GrandPrixData* getGrandPrix() const { return m_grand_prix; }
const GrandPrixData& getGrandPrix() const { return m_grand_prix; }
// ------------------------------------------------------------------------
unsigned int getFinishedKarts() const { return m_num_finished_karts; }
// ------------------------------------------------------------------------
@ -682,7 +682,7 @@ public:
* \brief Higher-level method to start a GP without having to care about
* the exact startup sequence
*/
void startGP(GrandPrixData* gp, bool from_overworld,
void startGP(const GrandPrixData* gp, bool from_overworld,
bool continue_saved_gp);
/**

View File

@ -92,7 +92,7 @@ void RaceResultGUI::init()
// Calculate screenshot scrolling parameters
const std::vector<std::string> tracks =
race_manager->getGrandPrix()->getTrackNames();
race_manager->getGrandPrix().getTrackNames();
int n_tracks = tracks.size();
int currentTrack = race_manager->getTrackNumber();
m_start_track = currentTrack;
@ -208,7 +208,7 @@ void RaceResultGUI::enableAllButtons()
void RaceResultGUI::eventCallback(GUIEngine::Widget* widget,
const std::string& name, const int playerID)
{
int n_tracks = race_manager->getGrandPrix()->getNumberOfTracks();
int n_tracks = race_manager->getGrandPrix().getNumberOfTracks();
if (name == "up_button" && n_tracks > m_max_tracks && m_start_track > 0)
{
m_start_track--;
@ -1121,7 +1121,7 @@ void RaceResultGUI::enableGPProgress()
status_label->m_h = font_height;
status_label->add();
status_label->setText(_("Track %i/%i", currentTrack + 1,
race_manager->getGrandPrix()->getNumberOfTracks()), true);
race_manager->getGrandPrix().getNumberOfTracks()), true);
addGPProgressWidget(status_label);
y = (status_label->m_y + status_label->m_h + 5);
@ -1316,7 +1316,7 @@ void RaceResultGUI::displayHighScores()
void RaceResultGUI::displayScreenShots()
{
const std::vector<std::string> tracks =
race_manager->getGrandPrix()->getTrackNames();
race_manager->getGrandPrix().getTrackNames();
int currentTrack = race_manager->getTrackNumber();
int n_sshot = 1;