Fixed --stk-config parameters: the user specified config file was read too late

(after all karts were loaded and therefore initialised with the original config
file default parameters), see bug 3072762.
-This line, and those below, will be ignored--

M    main.cpp
M    config/stk_config.cpp
M    config/stk_config.hpp
M    items/item_manager.cpp


git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@6166 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
hikerstk
2010-09-29 23:09:53 +00:00
parent ce0a163d5c
commit ecfd912d54
4 changed files with 34 additions and 18 deletions

View File

@@ -40,7 +40,13 @@ float STKConfig::UNDEFINED = -99.9f;
*/
void STKConfig::load(const std::string &filename)
{
// Avoid loading the default config file if a user-specific
// config file has already been loaded.
if(m_has_been_loaded) return;
m_has_been_loaded = true;
init_defaults();
XMLNode *root = 0;
try
{
@@ -121,7 +127,6 @@ void STKConfig::load(const std::string &filename)
CHECK_NEG(m_penalty_time, "penalty-time" );
m_kart_properties.checkAllSet(filename);
item_manager->setSwitchItems(m_switch_items);
} // load
// -----------------------------------------------------------------------------

View File

@@ -114,9 +114,16 @@ public:
MusicInformation
*m_title_music; /**<Filename of the title music to play.*/
private:
/** True if stk_config has been loaded. This is necessary if the
* --stk-config command line parameter has been specified to avoid
* that stk loads the default configuration after already having
* loaded a user specified config file. */
bool m_has_been_loaded;
public:
/** Empty constructor. The actual work is done in load. */
STKConfig() {};
STKConfig() {m_has_been_loaded= false;};
void init_defaults ();
void getAllData (const XMLNode * root);
void load (const std::string &filename);

View File

@@ -51,6 +51,7 @@ ItemManager::ItemManager()
m_switch_to.reserve(Item::ITEM_COUNT);
for(unsigned int i=Item::ITEM_FIRST; i<Item::ITEM_COUNT; i++)
m_switch_to.push_back((Item::ItemType)i);
setSwitchItems(stk_config->m_switch_items);
} // ItemManager
//-----------------------------------------------------------------------------

View File

@@ -136,15 +136,21 @@ int handleCmdLinePreliminary(int argc, char **argv)
for(int i=1; i<argc; i++)
{
if(argv[i][0] != '-') continue;
if ( !strcmp(argv[i], "--help" ) ||
!strcmp(argv[i], "-help" ) ||
if (!strcmp(argv[i], "--help" ) ||
!strcmp(argv[i], "-help" ) ||
!strcmp(argv[i], "--help" ) ||
!strcmp(argv[i], "-help" ) ||
!strcmp(argv[i], "-h") )
!strcmp(argv[i], "-help" ) ||
!strcmp(argv[i], "-h" ) )
{
cmdLineHelp(argv[0]);
exit(0);
}
else if( (!strcmp(argv[i], "--stk-config")) && i+1<argc )
{
stk_config->load(file_manager->getConfigFile(argv[i+1]));
fprintf ( stdout, "STK config will be read from %s.\n", argv[i+1] ) ;
i++;
}
else if( !strcmp(argv[i], "--trackdir") && i+1<argc )
{
TrackManager::addTrackSearchDir(argv[i+1]);
@@ -354,12 +360,6 @@ int handleCmdLine(int argc, char **argv)
race_manager->setGrandPrix(*gp);
i++;
}
else if( (!strcmp(argv[i], "--stk-config")) && i+1<argc )
{
stk_config->load(file_manager->getConfigFile(argv[i+1]));
fprintf ( stdout, "STK config will be read from %s.\n", argv[i+1] ) ;
i++;
}
else if( (!strcmp(argv[i], "--numkarts") || !strcmp(argv[i], "-k")) &&
i+1<argc )
{
@@ -426,7 +426,7 @@ int handleCmdLine(int argc, char **argv)
i++;
}
/* FIXME:
else if ( !strcmp(argv[i], "--playqers") && i+1<argc ) {
else if ( !strcmp(argv[i], "--players") && i+1<argc ) {
raceSetup.numPlayers = atoi(argv[i+1]);
if ( raceSetup.numPlayers < 0 || raceSetup.numPlayers > 4) {
@@ -496,6 +496,7 @@ int handleCmdLine(int argc, char **argv)
}
// these commands are already processed in handleCmdLinePreliminary, but repeat this
// just so that we don't get error messages about unknown commands
else if( !strcmp(argv[i], "--stk-config")&& i+1<argc ) { i++; }
else if( !strcmp(argv[i], "--trackdir") && i+1<argc ) { i++; }
else if( !strcmp(argv[i], "--kartdir") && i+1<argc ) { i++; }
else if( !strcmp(argv[i], "--renderer") && i+1<argc ) { i++; }
@@ -521,7 +522,7 @@ int handleCmdLine(int argc, char **argv)
}
return 1;
} /* handleCmdLine */
} // handleCmdLine
//=============================================================================
/** Initialises the minimum number of managers to get access to user_config.
@@ -531,11 +532,15 @@ void initUserConfig(char *argv[])
file_manager = new FileManager(argv);
translations = new Translations(); // needs file_manager
user_config = new UserConfig(); // needs file_manager
stk_config = new STKConfig(); // in case of --stk-config
// command line parameters
} // initUserConfig
//=============================================================================
void initRest()
{
stk_config->load(file_manager->getConfigFile("stk_config.xml"));
irr_driver = new IrrDriver();
// Init GUI
@@ -550,7 +555,6 @@ void initRest()
history = new History ();
material_manager = new MaterialManager ();
track_manager = new TrackManager ();
stk_config = new STKConfig ();
kart_properties_manager = new KartPropertiesManager();
projectile_manager = new ProjectileManager ();
powerup_manager = new PowerupManager ();
@@ -563,7 +567,6 @@ void initRest()
addons_manager = new Addons ();
#endif
stk_config->load(file_manager->getConfigFile("stk_config.xml"));
track_manager->loadTrackList();
music_manager->addMusicToTracks();
@@ -590,7 +593,7 @@ void initRest()
KartPropertiesManager::addKartSearchDir(file_manager->getAddonsDir() + "/data/karts/");
std::cout << "addons dir:" << file_manager->getAddonsDir() + "/data/karts/" << std::endl;
#endif
}
} // initRest
//=============================================================================
void cleanTuxKart()
@@ -617,7 +620,7 @@ void cleanTuxKart()
if(translations) delete translations;
if(file_manager) delete file_manager;
if(irr_driver) delete irr_driver;
}
} // cleanTuxKart
//=============================================================================