Remember the last selected difficulty, #laps and #karts.

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/trunk/supertuxkart@2886 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
hikerstk 2009-01-12 09:05:03 +00:00
parent 0a74a453bc
commit 7787fc21b1
6 changed files with 118 additions and 48 deletions

@ -55,10 +55,8 @@ enum WidgetTokens
RaceOptions::RaceOptions()
{
m_difficulty=race_manager->getDifficulty();
// FIXME: no medium AI atm
if(m_difficulty==RaceManager::RD_MEDIUM) m_difficulty=RaceManager::RD_HARD;
m_num_laps=race_manager->getNumLaps();
m_difficulty=user_config->getDefaultDifficulty();
m_num_laps=user_config->getDefaultNumLaps();
// Determine the minimum number of karts
m_min_karts = (int)race_manager->getNumPlayers();
if(race_manager->getMinorMode() == RaceManager::MINOR_MODE_FOLLOW_LEADER)
@ -67,7 +65,7 @@ RaceOptions::RaceOptions()
// least one opponent in addition to the leader
m_min_karts += (race_manager->getNumPlayers()==1 ? 2 : 1);
}
m_num_karts=std::max((int)race_manager->getNumKarts(), m_min_karts);
m_num_karts=std::max(user_config->getDefaultNumKarts(), m_min_karts);
const int DESC_WIDTH=48;
@ -262,39 +260,63 @@ void RaceOptions::select()
break;
case WTOK_START:
if( m_difficulty >= RaceManager::RD_EASY &&
m_difficulty <= RaceManager::RD_HARD)
{
race_manager->setDifficulty((RaceManager::Difficulty)m_difficulty);
}
else // invalid difficulty
{
race_manager->setDifficulty( RaceManager::RD_EASY );
}
// if there is no AI, there's no point asking the player for the amount of karts.
// It will always be the same as the number of human players
if(RaceManager::isBattleMode( race_manager->getMinorMode() ))
race_manager->setNumKarts(race_manager->getNumLocalPlayers());
else
race_manager->setNumKarts(m_num_karts);
if( race_manager->getMajorMode() != RaceManager::MAJOR_MODE_GRAND_PRIX &&
RaceManager::modeHasLaps( race_manager->getMinorMode() ) )
{
race_manager->setNumLaps( m_num_laps );
}
menu_manager->pushMenu(MENUID_START_RACE_FEEDBACK);
break;
setAllValues();
menu_manager->pushMenu(MENUID_START_RACE_FEEDBACK);
break;
case WTOK_QUIT:
menu_manager->popMenu();
// Save the current values as a default for later.
setAllValues();
menu_manager->popMenu();
break;
default: break;
} // switch
} // select
// ----------------------------------------------------------------------------
/** If the user presses a leave key, still save the values as default. */
void RaceOptions::handle(GameAction ga, int value)
{
// Attempts to close the menu are silently discarded
// since they do not make sense at this point.
if(ga == GA_LEAVE)
setAllValues();
BaseGUI::handle(ga, value);
} // handle
// ----------------------------------------------------------------------------
/** Stores the selected parameters (#laps etc) in the race manager and in
* user_config, so that they will be available as default next time.
*/
void RaceOptions::setAllValues()
{
if( m_difficulty >= RaceManager::RD_EASY &&
m_difficulty <= RaceManager::RD_HARD)
{
race_manager->setDifficulty((RaceManager::Difficulty)m_difficulty);
user_config->setDefaultNumDifficulty(m_difficulty);
}
else // invalid difficulty
{
race_manager->setDifficulty( RaceManager::RD_EASY );
user_config->setDefaultNumDifficulty(RaceManager::RD_EASY);
}
// if there is no AI, there's no point asking the player for the amount of karts.
// It will always be the same as the number of human players
if(RaceManager::isBattleMode( race_manager->getMinorMode() ))
race_manager->setNumKarts(race_manager->getNumLocalPlayers());
else
race_manager->setNumKarts(m_num_karts);
user_config->setDefaultNumKarts(race_manager->getNumKarts());
if( race_manager->getMajorMode() != RaceManager::MAJOR_MODE_GRAND_PRIX &&
RaceManager::modeHasLaps( race_manager->getMinorMode() ) )
{
race_manager->setNumLaps( m_num_laps );
user_config->setDefaultNumLaps(m_num_laps);
}
} // setAllValues
// ----------------------------------------------------------------------------
const char *RaceOptions::getDifficultyString(int difficulty) const
{

@ -28,12 +28,14 @@ private:
int m_min_karts; // minimum number of karts, depending on mode etc.
int m_num_laps;
const char *getDifficultyString(int) const;
void setAllValues();
public:
RaceOptions();
~RaceOptions();
void select();
void update(float dt);
virtual void handle(GameAction, int);
};
#endif

@ -233,14 +233,15 @@ int handleCmdLine(int argc, char **argv)
else if( (!strcmp(argv[i], "--numkarts") || !strcmp(argv[i], "-k")) &&
i+1<argc )
{
user_config->m_karts = atoi(argv[i+1]);
if(user_config->m_karts>stk_config->m_max_karts) {
user_config->setDefaultNumKarts(atoi(argv[i+1]));
if(user_config->getDefaultNumKarts()>stk_config->m_max_karts) {
fprintf(stdout, "Number of karts reset to maximum number %d\n",
stk_config->m_max_karts);
user_config->m_karts = stk_config->m_max_karts;
user_config->setDefaultNumKarts(stk_config->m_max_karts);
}
race_manager->setNumKarts(user_config->m_karts );
fprintf ( stdout, "%d karts will be used.\n", user_config->m_karts);
race_manager->setNumKarts(user_config->getDefaultNumKarts() );
fprintf(stdout, "%d karts will be used.\n",
user_config->getDefaultNumKarts());
i++;
}
else if( !strcmp(argv[i], "--list-tracks") || !strcmp(argv[i], "-l") )

@ -67,7 +67,7 @@ Kart* RaceManager::getKart(const unsigned int n)
*/
RaceManager::RaceManager()
{
m_num_karts = user_config->m_karts;
m_num_karts = user_config->getDefaultNumKarts();
m_difficulty = RD_HARD;
m_major_mode = MAJOR_MODE_SINGLE;
m_minor_mode = MINOR_MODE_QUICK_RACE;

@ -113,7 +113,10 @@ void UserConfig::setDefaults()
m_prev_windowed = false;
m_crashed = false;
m_blacklist_res.clear();
m_karts = 4;
m_num_karts = 4;
m_num_laps = 4;
m_difficulty = 0;
m_background_index = 0;
m_log_errors = false;
m_kart_group = "standard";
m_track_group = "standard";
@ -448,13 +451,18 @@ void UserConfig::loadConfig(const std::string& filename)
// blacklisted resolutions
lisp->getVector("blacklisted_resolutions",
m_blacklist_res);
/*get number of karts*/
lisp->get("karts", m_karts);
/*Get default number of karts, number of laps, and difficulty. */
lisp->get("karts", m_num_karts);
lisp->get("laps", m_num_laps);
lisp->get("difficulty", m_difficulty);
lisp->get("kart-group", m_kart_group);
lisp->get("track-group", m_track_group);
lisp->get("last-track", m_last_track);
// Get background image index.
lisp->get("background", m_background_index);
// Handle loading the stick config in it own method.
readStickConfigs(lisp);
@ -763,14 +771,20 @@ void UserConfig::saveConfig(const std::string& filename)
m_blacklist_res);
writer->write("fullscreen\t", m_fullscreen);
writer->writeComment("number of karts. -1 means use all");
writer->write("karts\t", m_karts);
writer->writeComment("Number of karts. -1 means use all");
writer->write("karts\t", m_num_karts);
writer->writeComment("Number of laps.");
writer->write("laps\t", m_num_laps);
writer->writeComment("Difficulty: 0=easy, 1=medium, 2=hard");
writer->write("difficulty\t", m_difficulty);
writer->writeComment("Last selected kart group");
writer->write("kart-group", m_kart_group);
writer->writeComment("Last selected track group");
writer->write("track-group", m_track_group);
writer->writeComment("Last track played");
writer->write("last-track", m_last_track);
writer->writeComment("Menu background image to use");
writer->write("background", m_background_index);
writer->writeComment("Information about last server used");
writer->write("server-address", m_server_address);
writer->write("server-port", m_server_port);

@ -111,6 +111,15 @@ private:
int m_sfx;
int m_music;
std::string m_warning;
/** Default number of karts. */
int m_num_karts;
/** Default number of laps. */
int m_num_laps;
/** Default difficulty. */
int m_difficulty;
/** Index of current background image. */
int m_background_index;
void readStickConfigs(const lisp::Lisp *);
void readLastInputConfigurations(const lisp::Lisp *);
@ -206,7 +215,6 @@ public:
bool m_prev_windowed;
bool m_crashed;
std::vector<std::string> m_blacklist_res;
int m_karts;
Player m_player[PLAYERS];
bool m_log_errors;
@ -214,10 +222,33 @@ public:
UserConfig(const std::string& filename);
~UserConfig();
void setDefaults();
void setMusic(int m) { m_music = m; }
void setSFX (int m) { m_sfx = m; }
bool doMusic() const { return m_music == UC_ENABLE;}
bool doSFX() const { return m_sfx == UC_ENABLE;}
void setMusic(int m) { m_music = m; }
void setSFX (int m) { m_sfx = m; }
bool doMusic() const { return m_music == UC_ENABLE;}
bool doSFX() const { return m_sfx == UC_ENABLE;}
/** Sets the default number of karts. This is only used to store
* this number in the user config file as a default next time. */
void setDefaultNumKarts(int n) { m_num_karts = n; }
/** Returns the default number of karts. */
int getDefaultNumKarts() const { return m_num_karts; }
/** Sets the default number of laps. This is only used to store
* this number in the user config file as a default next time. */
void setDefaultNumLaps(int n) { m_num_laps = n; }
/** Returns the default number of laps. */
int getDefaultNumLaps() const { return m_num_laps; }
/** Sets the default difficulty. This is only used to store
* this number in the user config file as a default next time. */
void setDefaultNumDifficulty(int n) { m_difficulty = n; }
/** Returns the default difficulty. */
int getDefaultDifficulty() const { return m_difficulty; }
/** Sets the index of the background image. */
void setBackgroundIndex(int n) { m_background_index = n; }
/** Get the index of the background image. */
int getBackgroundIndex() const { return m_background_index; }
void loadConfig();
void loadConfig(const std::string& filename);
void saveConfig();