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:
parent
0a74a453bc
commit
7787fc21b1
@ -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
|
||||
|
11
src/main.cpp
11
src/main.cpp
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user