From 8ce23fe0786c7444c92c2d95b872bbe1f7fa7679 Mon Sep 17 00:00:00 2001 From: Ben Krajancic Date: Tue, 10 Oct 2017 09:53:15 +1100 Subject: [PATCH 01/18] Small clarification to prevent build errors Building outside of this directory prevents the executable from launching, this small addition can help prevent this issue from happening. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e67227497..03804f03c 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ To Build SuperTuxKart on Windows, follow these instructions: *Note: If you downloaded the source package from here: [SuperTuxKart.net - Source Control](https://supertuxkart.net/Source_control), then both `stk-code` and `stk-assets` **must** be in the same directory, otherwise the build can result in failure* 3. Download the Windows dependencies package from either [SuperTuxKart download area: Dependecies - SourceForge.net](https://sourceforge.net/projects/supertuxkart/files/SuperTuxKart%20Dependencies/Windows/) or [SuperTuxKart on GitHub - Dependencies](https://github.com/supertuxkart/dependencies), and unpack it; then, copy the `dependencies` directory from either the `windows` or the `windows_64bit` directories into the `stk-code` directory -4. Download CMake from here: [CMake - download page](https://cmake.org/download/), install it; once CMake is installed, double click on the CMake icon on your desktop, and point it towards your `stk-code` directory in the 'Where is the source code' field, and point it to a directory called `build` or `bld` +4. Download CMake from here: [CMake - download page](https://cmake.org/download/), install it; once CMake is installed, double click on the CMake icon on your desktop, and point it towards your `stk-code` directory in the 'Where is the source code' field, and point it to a directory called `build` or `bld` inside the stk-code directory. 5. Press 'Configure'; CMake will ask you if it is OK to create the aformentioned directory, press `Yes`. CMake will then ask you about your version of Visual Studio. Confirm your selection; *Please look at the table below to avoid confusion between version numbers and releases of Visual Studio*; CMake will begin creating the required files for the build in the directory. From 74cdd07ba7b5c7a66c1fece1b434eda5240a09fb Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Thu, 26 Oct 2017 09:11:57 +1100 Subject: [PATCH 02/18] Added string array for karts per gamemode, and references to it to replace num_karts --- src/config/user_config.hpp | 17 ++++++++++++++++- src/states_screens/track_info_screen.cpp | 11 +++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index 457c19192..5b61479ff 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -369,7 +369,22 @@ namespace UserConfigParams PARAM_PREFIX StringUserConfigParam m_last_used_kart_group PARAM_DEFAULT( StringUserConfigParam("all", "last_kart_group", "Last selected kart group") ); - + // ---- Gamemode setup + + PARAM_PREFIX StringListUserConfigParam m_karts_per_gamemode + PARAM_DEFAULT(StringListUserConfigParam("karts_per_gamemode", + "Number of karts per gamemode. Order corresponds to Enum value", + 10, + "3", + "3", + "3", + "3", + "3", + "3", + "3", + "3", + "3", + "3")); // ---- Wiimote data PARAM_PREFIX GroupUserConfigParam m_wiimote_group PARAM_DEFAULT( GroupUserConfigParam("WiiMote", diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp index f4ea1bc9b..f99741ee7 100644 --- a/src/states_screens/track_info_screen.cpp +++ b/src/states_screens/track_info_screen.cpp @@ -163,15 +163,20 @@ void TrackInfoScreen::init() race_manager->hasAI()); m_ai_kart_spinner->setVisible(has_AI); getWidget("ai-text")->setVisible(has_AI); + + std::vector karts_per_gamemode = UserConfigParams::m_karts_per_gamemode; + if (has_AI) { m_ai_kart_spinner->setActive(true); - + + int num_ai = stoi(karts_per_gamemode[race_manager->getMinorMode()]) - local_players; // Avoid negative numbers (which can happen if e.g. the number of karts // in a previous race was lower than the number of players now. - int num_ai = UserConfigParams::m_num_karts - local_players; + if (num_ai < 0) num_ai = 0; m_ai_kart_spinner->setValue(num_ai); + race_manager->setNumKarts(num_ai + local_players); // Set the max karts supported based on the battle arena selected if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_3_STRIKES || @@ -240,6 +245,8 @@ void TrackInfoScreen::init() m_ai_kart_spinner->setValue(0); m_ai_kart_spinner->setActive(false); race_manager->setNumKarts(race_manager->getNumLocalPlayers()); + karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumLocalPlayers(); + UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; UserConfigParams::m_num_karts = race_manager->getNumLocalPlayers(); } else if (record_available) From df69a684a3635b60e4ca1fa0e360175e84de1d41 Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Thu, 26 Oct 2017 09:39:48 +1100 Subject: [PATCH 03/18] Identified cause of compile error --- src/config/user_config.hpp | 4 +++- src/states_screens/track_info_screen.cpp | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index 5b61479ff..d95610a91 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -371,8 +371,9 @@ namespace UserConfigParams "Last selected kart group") ); // ---- Gamemode setup + PARAM_PREFIX StringListUserConfigParam m_karts_per_gamemode - PARAM_DEFAULT(StringListUserConfigParam("karts_per_gamemode", + PARAM_DEFAULT(StringListUserConfigParam("karts_per_gamemode", "The karts per gamemode" "Number of karts per gamemode. Order corresponds to Enum value", 10, "3", @@ -385,6 +386,7 @@ namespace UserConfigParams "3", "3", "3")); + // ---- Wiimote data PARAM_PREFIX GroupUserConfigParam m_wiimote_group PARAM_DEFAULT( GroupUserConfigParam("WiiMote", diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp index f99741ee7..55007ff47 100644 --- a/src/states_screens/track_info_screen.cpp +++ b/src/states_screens/track_info_screen.cpp @@ -245,8 +245,10 @@ void TrackInfoScreen::init() m_ai_kart_spinner->setValue(0); m_ai_kart_spinner->setActive(false); race_manager->setNumKarts(race_manager->getNumLocalPlayers()); - karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumLocalPlayers(); - UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; + + //This is causing an error + karts_per_gamemode[race_manager->getMinorMode()] = std::to_string(race_manager->getNumLocalPlayers()); + UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; //Causes error UserConfigParams::m_num_karts = race_manager->getNumLocalPlayers(); } else if (record_available) From af7fefee1e5744d3e68599600876347d1f69f99b Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Thu, 26 Oct 2017 11:32:43 +1100 Subject: [PATCH 04/18] note errors --- src/states_screens/track_info_screen.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp index 55007ff47..f789e59bd 100644 --- a/src/states_screens/track_info_screen.cpp +++ b/src/states_screens/track_info_screen.cpp @@ -169,8 +169,8 @@ void TrackInfoScreen::init() if (has_AI) { m_ai_kart_spinner->setActive(true); - - int num_ai = stoi(karts_per_gamemode[race_manager->getMinorMode()]) - local_players; + int gamemode = race_manager->getMinorMode(); + int num_ai = stoi(karts_per_gamemode[gamemode]) - local_players; //TODO error caused by enums not being sequential // Avoid negative numbers (which can happen if e.g. the number of karts // in a previous race was lower than the number of players now. @@ -248,7 +248,7 @@ void TrackInfoScreen::init() //This is causing an error karts_per_gamemode[race_manager->getMinorMode()] = std::to_string(race_manager->getNumLocalPlayers()); - UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; //Causes error + // UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; //TODO Causes error UserConfigParams::m_num_karts = race_manager->getNumLocalPlayers(); } else if (record_available) From 823d3112ad678a2886bc39f528f1c92ce73ef8f3 Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Fri, 27 Oct 2017 22:31:54 +1100 Subject: [PATCH 05/18] Begun making template for dictionary --- src/config/user_config.cpp | 139 +++++++++++++++++++++++ src/config/user_config.hpp | 52 ++++++++- src/states_screens/track_info_screen.cpp | 2 +- 3 files changed, 188 insertions(+), 5 deletions(-) diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index 95f013d91..954f4beb2 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -321,7 +321,146 @@ core::stringc ListUserConfigParam::toString() const return ""; } // toString + // ============================================================================ +template +MapUserConfigParam::MapUserConfigParam(const char* param_name, + const char* comment) +{ + m_param_name = param_name; + all_params.push_back(this); + if (comment != NULL) m_comment = comment; +} // MapUserConfigParam + // ============================================================================ +template +MapUserConfigParam::MapUserConfigParam(const char* param_name, + const char* comment, + int nb_elements, + ...) +{ + m_param_name = param_name; + all_params.push_back(this); + if (comment != NULL) m_comment = comment; + + // add the default list + va_list arguments; + va_start(arguments, nb_elements); + for (int i = 0; i < nb_elements; i++) + m_elements.push_back(T(va_arg(arguments, U))); + va_end(arguments); // Cleans up the list +} // MapUserConfigParam + + // ============================================================================ +template +MapUserConfigParam::MapUserConfigParam(const char* param_name, + GroupUserConfigParam* group, + const char* comment) +{ + m_param_name = param_name; + group->addChild(this); + if (comment != NULL) m_comment = comment; +} // MapUserConfigParam + + // ============================================================================ +template +MapUserConfigParam::MapUserConfigParam(const char* param_name, + GroupUserConfigParam* group, + const char* comment, + int nb_elements, + ...) +{ + m_param_name = param_name; + group->addChild(this); + if (comment != NULL) m_comment = comment; + + // add the default list + va_list arguments; + va_start(arguments, nb_elements); + for (int i = 0; i < nb_elements; i++) + m_elements.push_back(va_arg(arguments, T)); + va_end(arguments); // Cleans up the list +} // MapUserConfigParam + + // ---------------------------------------------------------------------------- +template +void MapUserConfigParam::write(std::ofstream& stream) const +{ + const int elts_amount = m_elements.size(); + + // comment + if (m_comment.size() > 0) stream << " \n <" << m_param_name.c_str() << "\n"; + + stream << " Size=\"" << elts_amount << "\"\n"; + // actual elements + //for (int n = 0; n::iterator it = m_elements.begin(); it != m_elements.end(); ++it) + { + stream << " " << it->first << "=\"" << it->second << "\"\n"; + } + stream << " >\n"; + stream << " \n\n"; +} // write + + // ---------------------------------------------------------------------------- + +template +void MapUserConfigParam::findYourDataInAChildOf(const XMLNode* node) +{ + const XMLNode* child = node->getNode(m_param_name); + if (child == NULL) + { + //Log::error("User Config", "Couldn't find parameter group %s", m_param_name.c_str()); + return; + } + + int attr_count = 0; + child->get("Size", &attr_count); + for (int n = 0; nget(StringUtils::toString(n), &str); + StringUtils::fromString(str, elt); + + // check if the element is already there : + bool there = false; + for (unsigned int i = 0; i < m_elements.size(); i++) + { + if (elt == m_elements[i]) + { + there = true; + break; + } + } + if (!there) + { + m_elements.push_back(elt); + } + } + +} // findYourDataInAChildOf + + // ---------------------------------------------------------------------------- +template +void MapUserConfigParam::findYourDataInAnAttributeOf(const XMLNode* node) +{ +} // findYourDataInAnAttributeOf + + // ---------------------------------------------------------------------------- +template +void MapUserConfigParam::addElement(T element, U value) +{ + m_elements[element] = value; +} // findYourDataInAnAttributeOf + + // ---------------------------------------------------------------------------- +template +core::stringc MapUserConfigParam::toString() const +{ + return ""; +} // toString // ============================================================================ IntUserConfigParam::IntUserConfigParam(int default_value, diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index d95610a91..f76161f08 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -136,6 +136,50 @@ public: }; // ListUserConfigParam typedef ListUserConfigParam StringListUserConfigParam; +template +class MapUserConfigParam : public UserConfigParam +{ + std::map m_elements; + +public: + MapUserConfigParam(const char* param_name, + const char* comment = NULL); + MapUserConfigParam(const char* param_name, + const char* comment, + int nb_elts, + ...); + MapUserConfigParam(const char* param_name, + GroupUserConfigParam* group, + const char* comment = NULL); + MapUserConfigParam(const char* param_name, + GroupUserConfigParam* group, + const char* comment, + int nb_elts, + ...); + + void write(std::ofstream& stream) const; + void findYourDataInAChildOf(const XMLNode* node); + void findYourDataInAnAttributeOf(const XMLNode* node); + + void addElement(T element, U value); + + irr::core::stringc toString() const; + + operator std::map() const + { + return m_elements; + } + float& operator=(const std::map& v) + { + m_elements = std::map(v); return m_elements; + } + float& operator=(const MapUserConfigParam& v) + { + m_elements = std::map(v); return m_elements; + } +}; // ListUserConfigParam +typedef MapUserConfigParam StringToStringUserConfigParam; + // ============================================================================ class IntUserConfigParam : public UserConfigParam { @@ -372,12 +416,12 @@ namespace UserConfigParams // ---- Gamemode setup - PARAM_PREFIX StringListUserConfigParam m_karts_per_gamemode - PARAM_DEFAULT(StringListUserConfigParam("karts_per_gamemode", "The karts per gamemode" + PARAM_PREFIX StringToStringUserConfigParam m_karts_per_gamemode + PARAM_DEFAULT(StringToStringUserConfigParam("karts_per_gamemode", "The karts per gamemode" "Number of karts per gamemode. Order corresponds to Enum value", 10, - "3", - "3", + "3", + "3", "3", "3", "3", diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp index f789e59bd..7e956dbf6 100644 --- a/src/states_screens/track_info_screen.cpp +++ b/src/states_screens/track_info_screen.cpp @@ -164,7 +164,7 @@ void TrackInfoScreen::init() m_ai_kart_spinner->setVisible(has_AI); getWidget("ai-text")->setVisible(has_AI); - std::vector karts_per_gamemode = UserConfigParams::m_karts_per_gamemode; + std::vector karts_per_gamemode;//UserConfigParams::m_karts_per_gamemode; if (has_AI) { From f10feb77fdb614c60d498db029f6ab4e8a36adaf Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Sat, 28 Oct 2017 09:16:28 +1100 Subject: [PATCH 06/18] Can now load a map type --- src/config/user_config.cpp | 44 ++++++++++++++---------- src/config/user_config.hpp | 27 ++++++--------- src/states_screens/track_info_screen.cpp | 13 ++++--- 3 files changed, 45 insertions(+), 39 deletions(-) diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index 954f4beb2..50fe0d76d 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -29,6 +29,7 @@ static PtrVector all_params; // X-macros #define PARAM_PREFIX #define PARAM_DEFAULT(X) = X + #include "config/user_config.hpp" #include "config/saved_grand_prix.hpp" @@ -345,8 +346,11 @@ MapUserConfigParam::MapUserConfigParam(const char* param_name, // add the default list va_list arguments; va_start(arguments, nb_elements); - for (int i = 0; i < nb_elements; i++) - m_elements.push_back(T(va_arg(arguments, U))); + typedef std::pair DictThing; + for (int i = 0; i < nb_elements; i++) { + std::pair key_value_pair = va_arg(arguments, DictThing); + m_elements.insert(key_value_pair); + } va_end(arguments); // Cleans up the list } // MapUserConfigParam @@ -376,8 +380,11 @@ MapUserConfigParam::MapUserConfigParam(const char* param_name, // add the default list va_list arguments; va_start(arguments, nb_elements); - for (int i = 0; i < nb_elements; i++) - m_elements.push_back(va_arg(arguments, T)); + + for (int i = 0; i < nb_elements; i++) { + std::pair key_value_pair = va_arg(arguments, DictThing); + m_elements.insert(key_value_pair); + } va_end(arguments); // Cleans up the list } // MapUserConfigParam @@ -395,9 +402,8 @@ void MapUserConfigParam::write(std::ofstream& stream) const // actual elements //for (int n = 0; n::iterator it = m_elements.begin(); it != m_elements.end(); ++it) - { - stream << " " << it->first << "=\"" << it->second << "\"\n"; + for (const auto& kv : m_elements) { + stream << " " << kv.first << "=\"" << kv.second << "\"\n"; } stream << " >\n"; stream << " \n\n"; @@ -417,29 +423,29 @@ void MapUserConfigParam::findYourDataInAChildOf(const XMLNode* node) int attr_count = 0; child->get("Size", &attr_count); - for (int n = 0; n elt; std::string str; - child->get(StringUtils::toString(n), &str); - StringUtils::fromString(str, elt); - - // check if the element is already there : + child->get(kv.first, &str); + elt.first = kv.first; + elt.second = str.c_str(); + bool there = false; - for (unsigned int i = 0; i < m_elements.size(); i++) - { - if (elt == m_elements[i]) + + for (const auto& kvRHS : m_elements) { + if (elt.second == kvRHS.second) { there = true; break; } + } if (!there) { - m_elements.push_back(elt); + m_elements.insert(elt); } } - } // findYourDataInAChildOf // ---------------------------------------------------------------------------- diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index f76161f08..6f71d9389 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -178,7 +178,7 @@ public: m_elements = std::map(v); return m_elements; } }; // ListUserConfigParam -typedef MapUserConfigParam StringToStringUserConfigParam; +typedef MapUserConfigParam StringToStringUserConfigParam; // ============================================================================ class IntUserConfigParam : public UserConfigParam @@ -416,20 +416,7 @@ namespace UserConfigParams // ---- Gamemode setup - PARAM_PREFIX StringToStringUserConfigParam m_karts_per_gamemode - PARAM_DEFAULT(StringToStringUserConfigParam("karts_per_gamemode", "The karts per gamemode" - "Number of karts per gamemode. Order corresponds to Enum value", - 10, - "3", - "3", - "3", - "3", - "3", - "3", - "3", - "3", - "3", - "3")); + // ---- Wiimote data PARAM_PREFIX GroupUserConfigParam m_wiimote_group @@ -766,7 +753,15 @@ namespace UserConfigParams "stun.voxalot.com", "stun.voxgratia.org", "stun.xten.com") ); - + PARAM_PREFIX StringToStringUserConfigParam m_karts_per_gamemode + PARAM_DEFAULT(StringToStringUserConfigParam("karts_per_gamemode", "The karts per gamemode" + "Number of karts per gamemode. Order corresponds to Enum value", + 4, + std::make_pair("3", "1"), + std::make_pair("f", "2"), + std::make_pair("e", "4"), + std::make_pair("te", "5") + )); PARAM_PREFIX BoolUserConfigParam m_log_packets PARAM_DEFAULT( BoolUserConfigParam(false, "log-network-packets", "If all network packets should be logged") ); diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp index 7e956dbf6..d13ec39b9 100644 --- a/src/states_screens/track_info_screen.cpp +++ b/src/states_screens/track_info_screen.cpp @@ -164,14 +164,19 @@ void TrackInfoScreen::init() m_ai_kart_spinner->setVisible(has_AI); getWidget("ai-text")->setVisible(has_AI); - std::vector karts_per_gamemode;//UserConfigParams::m_karts_per_gamemode; + UserConfigParams::m_num_karts; + std::map karts_per_gamemode = UserConfigParams::m_karts_per_gamemode; + auto data = UserConfigParams::m_karts_per_gamemode; if (has_AI) { m_ai_kart_spinner->setActive(true); int gamemode = race_manager->getMinorMode(); - int num_ai = stoi(karts_per_gamemode[gamemode]) - local_players; //TODO error caused by enums not being sequential - // Avoid negative numbers (which can happen if e.g. the number of karts + //Temp fix + //int num_ai = stoi(karts_per_gamemode[ "3"/*gamemode*/]) - local_players; //TODO error caused by enums not being sequential + int num_ai = 1; + + // Avoid negative numbers (which can happen if e.g. the number of karts // in a previous race was lower than the number of players now. if (num_ai < 0) num_ai = 0; @@ -247,7 +252,7 @@ void TrackInfoScreen::init() race_manager->setNumKarts(race_manager->getNumLocalPlayers()); //This is causing an error - karts_per_gamemode[race_manager->getMinorMode()] = std::to_string(race_manager->getNumLocalPlayers()); +/// karts_per_gamemode[race_manager->getMinorMode()] = std::to_string(race_manager->getNumLocalPlayers()); // UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; //TODO Causes error UserConfigParams::m_num_karts = race_manager->getNumLocalPlayers(); } From ca330b1ac0aad9391905285c861a254495f3942f Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Sat, 28 Oct 2017 11:35:11 +1100 Subject: [PATCH 07/18] Map compiles now and can be set --- src/config/user_config.cpp | 5 ++--- src/config/user_config.hpp | 24 +++++++++++---------- src/states_screens/track_info_screen.cpp | 27 ++++++++++++------------ 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index 50fe0d76d..e2d93c2b8 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -426,10 +426,9 @@ void MapUserConfigParam::findYourDataInAChildOf(const XMLNode* node) for (const auto& kv : m_elements) { std::pair elt; - std::string str; - child->get(kv.first, &str); elt.first = kv.first; - elt.second = str.c_str(); + elt.second = kv.second; + bool there = false; diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index 6f71d9389..ab58ddd2a 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -169,17 +169,19 @@ public: { return m_elements; } - float& operator=(const std::map& v) + std::map& operator=(const std::map& v) { - m_elements = std::map(v); return m_elements; + m_elements = std::map(v); + return m_elements; } - float& operator=(const MapUserConfigParam& v) + std::map& operator=(const MapUserConfigParam& v) { - m_elements = std::map(v); return m_elements; + m_elements = std::map(v); + return m_elements; } }; // ListUserConfigParam typedef MapUserConfigParam StringToStringUserConfigParam; - +typedef MapUserConfigParam IntToIntUserConfigParam; // ============================================================================ class IntUserConfigParam : public UserConfigParam { @@ -753,14 +755,14 @@ namespace UserConfigParams "stun.voxalot.com", "stun.voxgratia.org", "stun.xten.com") ); - PARAM_PREFIX StringToStringUserConfigParam m_karts_per_gamemode - PARAM_DEFAULT(StringToStringUserConfigParam("karts_per_gamemode", "The karts per gamemode" + PARAM_PREFIX IntToIntUserConfigParam m_karts_per_gamemode + PARAM_DEFAULT(IntToIntUserConfigParam("karts_per_gamemode", "The karts per gamemode" "Number of karts per gamemode. Order corresponds to Enum value", 4, - std::make_pair("3", "1"), - std::make_pair("f", "2"), - std::make_pair("e", "4"), - std::make_pair("te", "5") + std::make_pair(0, 1), + std::make_pair(1, 2), + std::make_pair(3, 4), + std::make_pair(4, 5) )); PARAM_PREFIX BoolUserConfigParam m_log_packets PARAM_DEFAULT( BoolUserConfigParam(false, "log-network-packets", diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp index d13ec39b9..cab8ae795 100644 --- a/src/states_screens/track_info_screen.cpp +++ b/src/states_screens/track_info_screen.cpp @@ -165,21 +165,24 @@ void TrackInfoScreen::init() getWidget("ai-text")->setVisible(has_AI); UserConfigParams::m_num_karts; - std::map karts_per_gamemode = UserConfigParams::m_karts_per_gamemode; - auto data = UserConfigParams::m_karts_per_gamemode; + std::map karts_per_gamemode = UserConfigParams::m_karts_per_gamemode; if (has_AI) { m_ai_kart_spinner->setActive(true); int gamemode = race_manager->getMinorMode(); - //Temp fix - //int num_ai = stoi(karts_per_gamemode[ "3"/*gamemode*/]) - local_players; //TODO error caused by enums not being sequential - int num_ai = 1; - - // Avoid negative numbers (which can happen if e.g. the number of karts + int num_ai = karts_per_gamemode[gamemode]; + + // Avoid negative numbers (which can happen if e.g. the number of karts // in a previous race was lower than the number of players now. - if (num_ai < 0) num_ai = 0; + if (num_ai < 0) + { + num_ai = 0; + karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumPlayers(); + UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; + } + m_ai_kart_spinner->setValue(num_ai); race_manager->setNumKarts(num_ai + local_players); @@ -250,11 +253,9 @@ void TrackInfoScreen::init() m_ai_kart_spinner->setValue(0); m_ai_kart_spinner->setActive(false); race_manager->setNumKarts(race_manager->getNumLocalPlayers()); - - //This is causing an error -/// karts_per_gamemode[race_manager->getMinorMode()] = std::to_string(race_manager->getNumLocalPlayers()); - // UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; //TODO Causes error - UserConfigParams::m_num_karts = race_manager->getNumLocalPlayers(); + + karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumPlayers(); + UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; } else if (record_available) { From 4fbc39572bf81bb0ffea767c683ebae849dbcc55 Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Sat, 28 Oct 2017 11:56:52 +1100 Subject: [PATCH 08/18] Removed Tab, first working version! --- src/config/user_config.cpp | 182 +++++++++++------------ src/config/user_config.hpp | 95 ++++++------ src/states_screens/track_info_screen.cpp | 37 ++--- 3 files changed, 156 insertions(+), 158 deletions(-) diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index e2d93c2b8..7c05a89ac 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -322,149 +322,149 @@ core::stringc ListUserConfigParam::toString() const return ""; } // toString - // ============================================================================ + // ============================================================================ template MapUserConfigParam::MapUserConfigParam(const char* param_name, - const char* comment) + const char* comment) { - m_param_name = param_name; - all_params.push_back(this); - if (comment != NULL) m_comment = comment; + m_param_name = param_name; + all_params.push_back(this); + if (comment != NULL) m_comment = comment; } // MapUserConfigParam - // ============================================================================ + // ============================================================================ template MapUserConfigParam::MapUserConfigParam(const char* param_name, - const char* comment, - int nb_elements, - ...) + const char* comment, + int nb_elements, + ...) { - m_param_name = param_name; - all_params.push_back(this); - if (comment != NULL) m_comment = comment; + m_param_name = param_name; + all_params.push_back(this); + if (comment != NULL) m_comment = comment; - // add the default list - va_list arguments; - va_start(arguments, nb_elements); - typedef std::pair DictThing; - for (int i = 0; i < nb_elements; i++) { - std::pair key_value_pair = va_arg(arguments, DictThing); - m_elements.insert(key_value_pair); - } - va_end(arguments); // Cleans up the list + // add the default list + va_list arguments; + va_start(arguments, nb_elements); + typedef std::pair DictThing; + for (int i = 0; i < nb_elements; i++) { + std::pair key_value_pair = va_arg(arguments, DictThing); + m_elements.insert(key_value_pair); + } + va_end(arguments); // Cleans up the list } // MapUserConfigParam - // ============================================================================ + // ============================================================================ template MapUserConfigParam::MapUserConfigParam(const char* param_name, - GroupUserConfigParam* group, - const char* comment) + GroupUserConfigParam* group, + const char* comment) { - m_param_name = param_name; - group->addChild(this); - if (comment != NULL) m_comment = comment; + m_param_name = param_name; + group->addChild(this); + if (comment != NULL) m_comment = comment; } // MapUserConfigParam - // ============================================================================ + // ============================================================================ template MapUserConfigParam::MapUserConfigParam(const char* param_name, - GroupUserConfigParam* group, - const char* comment, - int nb_elements, - ...) + GroupUserConfigParam* group, + const char* comment, + int nb_elements, + ...) { - m_param_name = param_name; - group->addChild(this); - if (comment != NULL) m_comment = comment; + m_param_name = param_name; + group->addChild(this); + if (comment != NULL) m_comment = comment; - // add the default list - va_list arguments; - va_start(arguments, nb_elements); - - for (int i = 0; i < nb_elements; i++) { - std::pair key_value_pair = va_arg(arguments, DictThing); - m_elements.insert(key_value_pair); - } - va_end(arguments); // Cleans up the list + // add the default list + va_list arguments; + va_start(arguments, nb_elements); + + for (int i = 0; i < nb_elements; i++) { + std::pair key_value_pair = va_arg(arguments, DictThing); + m_elements.insert(key_value_pair); + } + va_end(arguments); // Cleans up the list } // MapUserConfigParam - // ---------------------------------------------------------------------------- + // ---------------------------------------------------------------------------- template void MapUserConfigParam::write(std::ofstream& stream) const { - const int elts_amount = m_elements.size(); + const int elts_amount = m_elements.size(); - // comment - if (m_comment.size() > 0) stream << " \n <" << m_param_name.c_str() << "\n"; + // comment + if (m_comment.size() > 0) stream << " \n <" << m_param_name.c_str() << "\n"; - stream << " Size=\"" << elts_amount << "\"\n"; - // actual elements - //for (int n = 0; n\n"; - stream << " \n\n"; + stream << " Size=\"" << elts_amount << "\"\n"; + // actual elements + //for (int n = 0; n\n"; + stream << " \n\n"; } // write - // ---------------------------------------------------------------------------- + // ---------------------------------------------------------------------------- template void MapUserConfigParam::findYourDataInAChildOf(const XMLNode* node) { - const XMLNode* child = node->getNode(m_param_name); - if (child == NULL) - { - //Log::error("User Config", "Couldn't find parameter group %s", m_param_name.c_str()); - return; - } + const XMLNode* child = node->getNode(m_param_name); + if (child == NULL) + { + //Log::error("User Config", "Couldn't find parameter group %s", m_param_name.c_str()); + return; + } - int attr_count = 0; - child->get("Size", &attr_count); - - for (const auto& kv : m_elements) { - std::pair elt; - elt.first = kv.first; - elt.second = kv.second; + int attr_count = 0; + child->get("Size", &attr_count); + + for (const auto& kv : m_elements) { + std::pair elt; + elt.first = kv.first; + elt.second = kv.second; - - bool there = false; + + bool there = false; - for (const auto& kvRHS : m_elements) { - if (elt.second == kvRHS.second) - { - there = true; - break; - } + for (const auto& kvRHS : m_elements) { + if (elt.second == kvRHS.second) + { + there = true; + break; + } - } - if (!there) - { - m_elements.insert(elt); - } - } + } + if (!there) + { + m_elements.insert(elt); + } + } } // findYourDataInAChildOf - // ---------------------------------------------------------------------------- + // ---------------------------------------------------------------------------- template void MapUserConfigParam::findYourDataInAnAttributeOf(const XMLNode* node) { } // findYourDataInAnAttributeOf - // ---------------------------------------------------------------------------- + // ---------------------------------------------------------------------------- template void MapUserConfigParam::addElement(T element, U value) { - m_elements[element] = value; + m_elements[element] = value; } // findYourDataInAnAttributeOf - // ---------------------------------------------------------------------------- + // ---------------------------------------------------------------------------- template core::stringc MapUserConfigParam::toString() const { - return ""; + return ""; } // toString // ============================================================================ diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index ab58ddd2a..bdaeb4f77 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -139,46 +139,49 @@ typedef ListUserConfigParam StringListUserConfigPar template class MapUserConfigParam : public UserConfigParam { - std::map m_elements; + std::map m_elements; public: - MapUserConfigParam(const char* param_name, - const char* comment = NULL); - MapUserConfigParam(const char* param_name, - const char* comment, - int nb_elts, - ...); - MapUserConfigParam(const char* param_name, - GroupUserConfigParam* group, - const char* comment = NULL); - MapUserConfigParam(const char* param_name, - GroupUserConfigParam* group, - const char* comment, - int nb_elts, - ...); + MapUserConfigParam(const char* param_name, + const char* comment = NULL); + MapUserConfigParam(const char* param_name, + const char* comment, + int nb_elts, + ...); + MapUserConfigParam(const char* param_name, + GroupUserConfigParam* group, + const char* comment = NULL); + MapUserConfigParam(const char* param_name, + GroupUserConfigParam* group, + const char* comment, + int nb_elts, + ...); - void write(std::ofstream& stream) const; - void findYourDataInAChildOf(const XMLNode* node); - void findYourDataInAnAttributeOf(const XMLNode* node); + void write(std::ofstream& stream) const; + void findYourDataInAChildOf(const XMLNode* node); + void findYourDataInAnAttributeOf(const XMLNode* node); - void addElement(T element, U value); + void addElement(T element, U value); - irr::core::stringc toString() const; + irr::core::stringc toString() const; - operator std::map() const - { - return m_elements; - } - std::map& operator=(const std::map& v) - { - m_elements = std::map(v); - return m_elements; - } - std::map& operator=(const MapUserConfigParam& v) - { - m_elements = std::map(v); - return m_elements; - } + operator std::map() const + { + return m_elements; + } + std::map& operator=(const std::map& v) + { + m_elements = std::map(v); + return m_elements; + } + std::map& operator=(const MapUserConfigParam& v) + { + m_elements = std::map(v); + return m_elements; + } + U& operator[] (const T key) { + return m_elements[key]; + } }; // ListUserConfigParam typedef MapUserConfigParam StringToStringUserConfigParam; typedef MapUserConfigParam IntToIntUserConfigParam; @@ -415,10 +418,10 @@ namespace UserConfigParams PARAM_PREFIX StringUserConfigParam m_last_used_kart_group PARAM_DEFAULT( StringUserConfigParam("all", "last_kart_group", "Last selected kart group") ); - // ---- Gamemode setup - + // ---- Gamemode setup + - + // ---- Wiimote data PARAM_PREFIX GroupUserConfigParam m_wiimote_group @@ -755,15 +758,15 @@ namespace UserConfigParams "stun.voxalot.com", "stun.voxgratia.org", "stun.xten.com") ); - PARAM_PREFIX IntToIntUserConfigParam m_karts_per_gamemode - PARAM_DEFAULT(IntToIntUserConfigParam("karts_per_gamemode", "The karts per gamemode" - "Number of karts per gamemode. Order corresponds to Enum value", - 4, - std::make_pair(0, 1), - std::make_pair(1, 2), - std::make_pair(3, 4), - std::make_pair(4, 5) - )); + PARAM_PREFIX IntToIntUserConfigParam m_karts_per_gamemode + PARAM_DEFAULT(IntToIntUserConfigParam("karts_per_gamemode", "The karts per gamemode" + "Number of karts per gamemode. Order corresponds to Enum value", + 4, + std::make_pair(0, 1), + std::make_pair(1, 2), + std::make_pair(3, 4), + std::make_pair(4, 5) + )); PARAM_PREFIX BoolUserConfigParam m_log_packets PARAM_DEFAULT( BoolUserConfigParam(false, "log-network-packets", "If all network packets should be logged") ); diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp index cab8ae795..15f7614cf 100644 --- a/src/states_screens/track_info_screen.cpp +++ b/src/states_screens/track_info_screen.cpp @@ -164,25 +164,19 @@ void TrackInfoScreen::init() m_ai_kart_spinner->setVisible(has_AI); getWidget("ai-text")->setVisible(has_AI); - UserConfigParams::m_num_karts; - std::map karts_per_gamemode = UserConfigParams::m_karts_per_gamemode; + UserConfigParams::m_num_karts; + std::map karts_per_gamemode = UserConfigParams::m_karts_per_gamemode; if (has_AI) { m_ai_kart_spinner->setActive(true); - int gamemode = race_manager->getMinorMode(); - int num_ai = karts_per_gamemode[gamemode]; - - // Avoid negative numbers (which can happen if e.g. the number of karts + int gamemode = race_manager->getMinorMode(); + int num_ai = karts_per_gamemode[gamemode]; + + // Avoid negative numbers (which can happen if e.g. the number of karts // in a previous race was lower than the number of players now. - - if (num_ai < 0) - { - num_ai = 0; - karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumPlayers(); - UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; - } - + + if (num_ai < 0) num_ai = 0; m_ai_kart_spinner->setValue(num_ai); race_manager->setNumKarts(num_ai + local_players); @@ -253,9 +247,9 @@ void TrackInfoScreen::init() m_ai_kart_spinner->setValue(0); m_ai_kart_spinner->setActive(false); race_manager->setNumKarts(race_manager->getNumLocalPlayers()); - - karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumPlayers(); - UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; + + karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumPlayers(); + UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; } else if (record_available) { @@ -382,10 +376,11 @@ void TrackInfoScreen::onEnterPressedInternal() if (has_AI) num_ai = m_ai_kart_spinner->getValue(); - if (UserConfigParams::m_num_karts != (local_players + num_ai)) + + if (UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] != (local_players + num_ai)) { race_manager->setNumKarts(local_players + num_ai); - UserConfigParams::m_num_karts = local_players + num_ai; + UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] = local_players + num_ai; } // Disable accidentally unlocking of a challenge @@ -435,7 +430,7 @@ void TrackInfoScreen::eventCallback(Widget* widget, const std::string& name, { m_ai_kart_spinner->setActive(false); race_manager->setNumKarts(race_manager->getNumLocalPlayers()); - UserConfigParams::m_num_karts = race_manager->getNumLocalPlayers(); + UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumberOfKarts(); } else { @@ -454,7 +449,7 @@ void TrackInfoScreen::eventCallback(Widget* widget, const std::string& name, { const int num_ai = m_ai_kart_spinner->getValue(); race_manager->setNumKarts( race_manager->getNumLocalPlayers() + num_ai ); - UserConfigParams::m_num_karts = race_manager->getNumLocalPlayers() + num_ai; + UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumberOfKarts(); updateHighScores(); } } // eventCallback From 4a0db1926d4afe8faf9eca5ff1d6b2dab296db14 Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Sat, 28 Oct 2017 12:09:23 +1100 Subject: [PATCH 09/18] Highlighted issue that needs resolving --- src/config/user_config.cpp | 8 ++++---- src/states_screens/track_info_screen.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index 7c05a89ac..e2d92c30c 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -346,9 +346,9 @@ MapUserConfigParam::MapUserConfigParam(const char* param_name, // add the default list va_list arguments; va_start(arguments, nb_elements); - typedef std::pair DictThing; + typedef std::pair PairType; //Necessary to prevent compile error below for (int i = 0; i < nb_elements; i++) { - std::pair key_value_pair = va_arg(arguments, DictThing); + std::pair key_value_pair = va_arg(arguments, PairType); m_elements.insert(key_value_pair); } va_end(arguments); // Cleans up the list @@ -380,9 +380,9 @@ MapUserConfigParam::MapUserConfigParam(const char* param_name, // add the default list va_list arguments; va_start(arguments, nb_elements); - + typedef std::pair PairType; //Necessary to prevent compile error below for (int i = 0; i < nb_elements; i++) { - std::pair key_value_pair = va_arg(arguments, DictThing); + std::pair key_value_pair = va_arg(arguments, PairType); m_elements.insert(key_value_pair); } va_end(arguments); // Cleans up the list diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp index 15f7614cf..b1d51e0fb 100644 --- a/src/states_screens/track_info_screen.cpp +++ b/src/states_screens/track_info_screen.cpp @@ -164,7 +164,7 @@ void TrackInfoScreen::init() m_ai_kart_spinner->setVisible(has_AI); getWidget("ai-text")->setVisible(has_AI); - UserConfigParams::m_num_karts; + std::map karts_per_gamemode = UserConfigParams::m_karts_per_gamemode; if (has_AI) From cb1a2b1e258fea9b2d108fbeece2777faf281dd6 Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Sat, 28 Oct 2017 12:51:49 +1100 Subject: [PATCH 10/18] Rename m_num_karts to be more appropriate, removed redundant variables I've made --- src/challenges/challenge_data.cpp | 12 ++++----- src/challenges/challenge_data.hpp | 4 +-- src/config/user_config.cpp | 3 ++- src/config/user_config.hpp | 13 ++++------ src/main.cpp | 10 ++++---- src/modes/demo_world.cpp | 6 ++--- src/modes/demo_world.hpp | 4 +-- src/race/race_manager.cpp | 32 ++++++++++++------------ src/race/race_manager.hpp | 8 +++--- src/states_screens/gp_info_screen.cpp | 4 +-- src/states_screens/track_info_screen.cpp | 14 ++++------- 11 files changed, 52 insertions(+), 58 deletions(-) diff --git a/src/challenges/challenge_data.cpp b/src/challenges/challenge_data.cpp index 6a0e6c52c..3b7c55bc3 100644 --- a/src/challenges/challenge_data.cpp +++ b/src/challenges/challenge_data.cpp @@ -47,7 +47,7 @@ ChallengeData::ChallengeData(const std::string& filename) for (int d=0; dget("number", &num_karts)) error("karts"); - m_num_karts[d] = num_karts; + m_default_num_karts[d] = num_karts; std::string replay_file; if (karts_node->get("replay_file", &replay_file)) @@ -385,7 +385,7 @@ void ChallengeData::setRace(RaceManager::Difficulty d) const race_manager->setMinorMode(m_minor); race_manager->setTrack(m_track_id); race_manager->setNumLaps(m_num_laps); - race_manager->setNumKarts(m_num_karts[d]); + race_manager->setNumKarts(m_default_num_karts[d]); race_manager->setNumPlayers(1); race_manager->setCoinTarget(m_energy[d]); race_manager->setDifficulty(d); @@ -400,7 +400,7 @@ void ChallengeData::setRace(RaceManager::Difficulty d) const race_manager->setMinorMode(m_minor); race_manager->setGrandPrix(*grand_prix_manager->getGrandPrix(m_gp_id)); race_manager->setDifficulty(d); - race_manager->setNumKarts(m_num_karts[d]); + race_manager->setNumKarts(m_default_num_karts[d]); race_manager->setNumPlayers(1); } @@ -444,7 +444,7 @@ bool ChallengeData::isChallengeFulfilled() const if (kart->isEliminated() ) return false; if (track_name != m_track_id ) return false; - if ((int)world->getNumKarts() < m_num_karts[d] ) return false; + if ((int)world->getNumKarts() < m_default_num_karts[d] ) return false; if (m_energy[d] > 0 && kart->getEnergy() < m_energy[d] ) return false; if (m_position[d] > 0 && kart->getPosition() > m_position[d]) return false; @@ -491,7 +491,7 @@ bool ChallengeData::isGPFulfilled() const if (race_manager->getMajorMode() != RaceManager::MAJOR_MODE_GRAND_PRIX || race_manager->getMinorMode() != m_minor || race_manager->getGrandPrix().getId() != m_gp_id || - race_manager->getNumberOfKarts() < (unsigned int)m_num_karts[d] || + race_manager->getNumberOfKarts() < (unsigned int)m_default_num_karts[d] || race_manager->getNumPlayers() > 1) return false; // check if the player came first. diff --git a/src/challenges/challenge_data.hpp b/src/challenges/challenge_data.hpp index 0cebc4556..6e45f23c2 100644 --- a/src/challenges/challenge_data.hpp +++ b/src/challenges/challenge_data.hpp @@ -84,7 +84,7 @@ private: int m_num_laps; int m_position[RaceManager::DIFFICULTY_COUNT]; - int m_num_karts[RaceManager::DIFFICULTY_COUNT]; + int m_default_num_karts[RaceManager::DIFFICULTY_COUNT]; std::string m_ai_kart_ident[RaceManager::DIFFICULTY_COUNT]; std::string m_replay_files[RaceManager::DIFFICULTY_COUNT]; float m_time[RaceManager::DIFFICULTY_COUNT]; @@ -208,7 +208,7 @@ public: */ int getNumKarts(RaceManager::Difficulty difficulty) const { - return m_num_karts[difficulty]; + return m_default_num_karts[difficulty]; } // getNumKarts // ------------------------------------------------------------------------ /** Returns the maximum time in which the kart must finish. diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index e2d92c30c..6184debd0 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -346,7 +346,7 @@ MapUserConfigParam::MapUserConfigParam(const char* param_name, // add the default list va_list arguments; va_start(arguments, nb_elements); - typedef std::pair PairType; //Necessary to prevent compile error below + typedef std::pair PairType; //Necessary to prevent compile error below for (int i = 0; i < nb_elements; i++) { std::pair key_value_pair = va_arg(arguments, PairType); m_elements.insert(key_value_pair); @@ -381,6 +381,7 @@ MapUserConfigParam::MapUserConfigParam(const char* param_name, va_list arguments; va_start(arguments, nb_elements); typedef std::pair PairType; //Necessary to prevent compile error below + for (int i = 0; i < nb_elements; i++) { std::pair key_value_pair = va_arg(arguments, PairType); m_elements.insert(key_value_pair); diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index bdaeb4f77..c11dea614 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -384,7 +384,7 @@ namespace UserConfigParams PARAM_DEFAULT( GroupUserConfigParam("RaceSetup", "Race Setup Settings") ); - PARAM_PREFIX IntUserConfigParam m_num_karts + PARAM_PREFIX IntUserConfigParam m_default_num_karts PARAM_DEFAULT( IntUserConfigParam(4, "numkarts", &m_race_setup_group, "Default number of karts. -1 means use all") ); @@ -759,13 +759,10 @@ namespace UserConfigParams "stun.voxgratia.org", "stun.xten.com") ); PARAM_PREFIX IntToIntUserConfigParam m_karts_per_gamemode - PARAM_DEFAULT(IntToIntUserConfigParam("karts_per_gamemode", "The karts per gamemode" - "Number of karts per gamemode. Order corresponds to Enum value", - 4, - std::make_pair(0, 1), - std::make_pair(1, 2), - std::make_pair(3, 4), - std::make_pair(4, 5) + PARAM_DEFAULT(IntToIntUserConfigParam("karts_per_gamemode", + "The Number of karts per gamemode.", + 1, + std::make_pair(1100, 4) )); PARAM_PREFIX BoolUserConfigParam m_log_packets PARAM_DEFAULT( BoolUserConfigParam(false, "log-network-packets", diff --git a/src/main.cpp b/src/main.cpp index c6b5932a5..5eefa3f1b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1189,16 +1189,16 @@ int handleCmdLine() if(CommandLine::has("--numkarts", &n) ||CommandLine::has("-k", &n)) { - UserConfigParams::m_num_karts = n; - if(UserConfigParams::m_num_karts > stk_config->m_max_karts) + UserConfigParams::m_default_num_karts = n; + if(UserConfigParams::m_default_num_karts > stk_config->m_max_karts) { Log::warn("main", "Number of karts reset to maximum number %d.", stk_config->m_max_karts); - UserConfigParams::m_num_karts = stk_config->m_max_karts; + UserConfigParams::m_default_num_karts = stk_config->m_max_karts; } - race_manager->setNumKarts( UserConfigParams::m_num_karts ); + race_manager->setNumKarts( UserConfigParams::m_default_num_karts ); Log::verbose("main", "%d karts will be used.", - (int)UserConfigParams::m_num_karts); + (int)UserConfigParams::m_default_num_karts); } // --numkarts if(CommandLine::has( "--no-start-screen") || diff --git a/src/modes/demo_world.cpp b/src/modes/demo_world.cpp index 867b6ad15..078ba1268 100644 --- a/src/modes/demo_world.cpp +++ b/src/modes/demo_world.cpp @@ -29,7 +29,7 @@ #include "tracks/track_manager.hpp" std::vector DemoWorld::m_demo_tracks; -int DemoWorld::m_num_karts = 2; +int DemoWorld::m_default_num_karts = 2; float DemoWorld::m_max_idle_time = 99999.0f; float DemoWorld::m_current_idle_time = 0; bool DemoWorld::m_do_demo = false; @@ -49,7 +49,7 @@ DemoWorld::DemoWorld() race_manager->setReverseTrack(false); race_manager->setMinorMode (RaceManager::MINOR_MODE_NORMAL_RACE); race_manager->setDifficulty(RaceManager::DIFFICULTY_HARD); - race_manager->setNumKarts(m_num_karts); + race_manager->setNumKarts(m_default_num_karts); race_manager->setNumPlayers(1); race_manager->setPlayerKart(0, UserConfigParams::m_default_kart); @@ -149,7 +149,7 @@ bool DemoWorld::updateIdleTimeAndStartDemo(float dt) input_manager->getDeviceManager()->setAssignMode(ASSIGN); m_do_demo = true; - race_manager->setNumKarts(m_num_karts); + race_manager->setNumKarts(m_default_num_karts); race_manager->setPlayerKart(0, "tux"); race_manager->setupPlayerKartInfo(); race_manager->startSingleRace(m_demo_tracks[0], m_num_laps, false); diff --git a/src/modes/demo_world.hpp b/src/modes/demo_world.hpp index a2d047a2f..bce6940be 100644 --- a/src/modes/demo_world.hpp +++ b/src/modes/demo_world.hpp @@ -40,7 +40,7 @@ private: static std::vector m_demo_tracks; /** Number of karts to use in demo mode. */ - static int m_num_karts; + static int m_default_num_karts; /** Idle time after which demo mode should be started. */ static float m_max_idle_time; @@ -66,7 +66,7 @@ public: static void setNumLaps(unsigned int num_laps) { m_num_laps = num_laps; } // ------------------------------------------------------------------------ /** Sets the number of karts to use in demo mode. */ - static void setNumKarts(unsigned int num_karts) { m_num_karts = num_karts;} + static void setNumKarts(unsigned int num_karts) { m_default_num_karts = num_karts;} // ------------------------------------------------------------------------ static void setTracks(const std::vector &tracks); // ------------------------------------------------------------------------ diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index 7808712a1..13483d965 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -66,7 +66,7 @@ RaceManager::RaceManager() { // Several code depends on this, e.g. kart_properties assert(DIFFICULTY_FIRST == 0); - m_num_karts = UserConfigParams::m_num_karts; + m_default_num_karts = UserConfigParams::m_default_num_karts; m_difficulty = DIFFICULTY_HARD; m_major_mode = MAJOR_MODE_SINGLE; m_minor_mode = MINOR_MODE_NORMAL_RACE; @@ -266,16 +266,16 @@ void RaceManager::setTrack(const std::string& track) */ void RaceManager::computeRandomKartList() { - int n = m_num_karts - (int)m_player_karts.size(); + int n = m_default_num_karts - (int)m_player_karts.size(); if(UserConfigParams::logMisc()) - Log::info("RaceManager", "AI karts count = %d for m_num_karts = %d and " - "m_player_karts.size() = %d", n, m_num_karts, m_player_karts.size()); + Log::info("RaceManager", "AI karts count = %d for m_default_num_karts = %d and " + "m_player_karts.size() = %d", n, m_default_num_karts, m_player_karts.size()); // If less kart selected than there are player karts, adjust the number of // karts to the minimum if(n<0) { - m_num_karts -= n; + m_default_num_karts -= n; n = 0; } @@ -363,20 +363,20 @@ void RaceManager::startNew(bool from_overworld) } // if grand prix // command line parameters: negative numbers=all karts - if(m_num_karts < 0 ) m_num_karts = stk_config->m_max_karts; - if((size_t)m_num_karts < m_player_karts.size()) - m_num_karts = (int)m_player_karts.size(); + if(m_default_num_karts < 0 ) m_default_num_karts = stk_config->m_max_karts; + if((size_t)m_default_num_karts < m_player_karts.size()) + m_default_num_karts = (int)m_player_karts.size(); // Create the kart status data structure to keep track of scores, times, ... // ========================================================================== m_kart_status.clear(); if (gk > 0) - m_num_karts += gk; + m_default_num_karts += gk; Log::verbose("RaceManager", "Nb of karts=%u, ghost karts:%u ai:%lu players:%lu\n", - (unsigned int) m_num_karts, gk, m_ai_kart_list.size(), m_player_karts.size()); + (unsigned int) m_default_num_karts, gk, m_ai_kart_list.size(), m_player_karts.size()); - assert((unsigned int)m_num_karts == gk+m_ai_kart_list.size()+m_player_karts.size()); + assert((unsigned int)m_default_num_karts == gk+m_ai_kart_list.size()+m_player_karts.size()); // First add the ghost karts (if any) // ---------------------------------------- @@ -550,7 +550,7 @@ void RaceManager::startNextRace() // The race is rerun, and the points and scores get reset ... but if // a kart hasn't finished the race at this stage, last_score and time // would be undefined. - for(int i=0; igetNumGhostKart(); + m_default_num_karts = ReplayPlay::get()->getNumGhostKart(); m_kart_status.clear(); Log::verbose("RaceManager", "%u ghost kart(s) for watching replay only\n", - (unsigned int)m_num_karts); + (unsigned int)m_default_num_karts); int init_gp_rank = 0; - for(int i = 0; i < m_num_karts; i++) + for(int i = 0; i < m_default_num_karts; i++) { m_kart_status.push_back(KartStatus(ReplayPlay::get()->getGhostKartName(i), i, -1, -1, init_gp_rank, KT_GHOST, PLAYER_DIFFICULTY_NORMAL)); diff --git a/src/race/race_manager.hpp b/src/race/race_manager.hpp index 7be0e8227..e218be502 100644 --- a/src/race/race_manager.hpp +++ b/src/race/race_manager.hpp @@ -329,7 +329,7 @@ private: int m_track_number; GrandPrixData m_grand_prix; SavedGrandPrix* m_saved_gp; - int m_num_karts; + int m_default_num_karts; unsigned int m_num_spare_tire_karts; unsigned int m_num_finished_karts; unsigned int m_num_finished_players; @@ -469,7 +469,7 @@ public: // ------------------------------------------------------------------------ void setNumKarts(int num) { - m_num_karts = num; + m_default_num_karts = num; m_ai_kart_override = ""; m_ai_superpower = SUPERPOWER_NONE; } // setNumKarts @@ -492,7 +492,7 @@ public: // ------------------------------------------------------------------------ /** Returns the selected number of karts (selected number of players and * AI karts. */ - unsigned int getNumberOfKarts() const {return m_num_karts; } + unsigned int getNumberOfKarts() const {return m_default_num_karts; } // ------------------------------------------------------------------------ MajorRaceModeType getMajorMode() const { return m_major_mode; } // ------------------------------------------------------------------------ @@ -759,7 +759,7 @@ public: m_kart_status.push_back(KartStatus(name, 0, -1, -1, -1, KT_SPARE_TIRE, PLAYER_DIFFICULTY_NORMAL)); m_num_spare_tire_karts++; - m_num_karts++; + m_default_num_karts++; } // addSpareTireKart // ------------------------------------------------------------------------ void setSpareTireKartNum(unsigned int i) diff --git a/src/states_screens/gp_info_screen.cpp b/src/states_screens/gp_info_screen.cpp index 161de15e8..c45fc6af8 100644 --- a/src/states_screens/gp_info_screen.cpp +++ b/src/states_screens/gp_info_screen.cpp @@ -235,7 +235,7 @@ void GPInfoScreen::init() // Avoid negative numbers (which can happen if e.g. the number of karts // in a previous race was lower than the number of players now. - int num_ai = UserConfigParams::m_num_karts - race_manager->getNumLocalPlayers(); + int num_ai = UserConfigParams::m_default_num_karts - race_manager->getNumLocalPlayers(); if (num_ai < 0) num_ai = 0; m_ai_kart_spinner->setValue(num_ai); race_manager->setNumKarts(num_ai + race_manager->getNumLocalPlayers()); @@ -345,7 +345,7 @@ void GPInfoScreen::eventCallback(Widget *, const std::string &name, { const int num_ai = m_ai_kart_spinner->getValue(); race_manager->setNumKarts( race_manager->getNumLocalPlayers() + num_ai ); - UserConfigParams::m_num_karts = race_manager->getNumLocalPlayers() + num_ai; + UserConfigParams::m_default_num_karts = race_manager->getNumLocalPlayers() + num_ai; } else if(name=="back") { diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp index b1d51e0fb..4cec05e86 100644 --- a/src/states_screens/track_info_screen.cpp +++ b/src/states_screens/track_info_screen.cpp @@ -164,14 +164,11 @@ void TrackInfoScreen::init() m_ai_kart_spinner->setVisible(has_AI); getWidget("ai-text")->setVisible(has_AI); - - std::map karts_per_gamemode = UserConfigParams::m_karts_per_gamemode; - if (has_AI) { m_ai_kart_spinner->setActive(true); - int gamemode = race_manager->getMinorMode(); - int num_ai = karts_per_gamemode[gamemode]; + + int num_ai = UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] - local_players; // Avoid negative numbers (which can happen if e.g. the number of karts // in a previous race was lower than the number of players now. @@ -248,8 +245,7 @@ void TrackInfoScreen::init() m_ai_kart_spinner->setActive(false); race_manager->setNumKarts(race_manager->getNumLocalPlayers()); - karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumPlayers(); - UserConfigParams::m_karts_per_gamemode = karts_per_gamemode; + UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumLocalPlayers(); } else if (record_available) { @@ -430,7 +426,7 @@ void TrackInfoScreen::eventCallback(Widget* widget, const std::string& name, { m_ai_kart_spinner->setActive(false); race_manager->setNumKarts(race_manager->getNumLocalPlayers()); - UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumberOfKarts(); + UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumLocalPlayers(); } else { @@ -449,7 +445,7 @@ void TrackInfoScreen::eventCallback(Widget* widget, const std::string& name, { const int num_ai = m_ai_kart_spinner->getValue(); race_manager->setNumKarts( race_manager->getNumLocalPlayers() + num_ai ); - UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumberOfKarts(); + UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumLocalPlayers() + num_ai; updateHighScores(); } } // eventCallback From d366dd84cd1a6e71d1ac561b9f887fe5cc83da88 Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Sat, 28 Oct 2017 12:59:04 +1100 Subject: [PATCH 11/18] Updated to naming conventions --- src/config/user_config.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index 6184debd0..acdd8c954 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -346,9 +346,9 @@ MapUserConfigParam::MapUserConfigParam(const char* param_name, // add the default list va_list arguments; va_start(arguments, nb_elements); - typedef std::pair PairType; //Necessary to prevent compile error below + typedef std::pair pair_type; //Necessary to prevent compile error below for (int i = 0; i < nb_elements; i++) { - std::pair key_value_pair = va_arg(arguments, PairType); + std::pair key_value_pair = va_arg(arguments, pair_type); m_elements.insert(key_value_pair); } va_end(arguments); // Cleans up the list From e50d295c870a26353ea629e8ebaeefcfcba39af5 Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Sat, 28 Oct 2017 13:05:08 +1100 Subject: [PATCH 12/18] Remvoe redundancy --- src/config/user_config.cpp | 1 - src/config/user_config.hpp | 8 +++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index acdd8c954..d8a529eb1 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -29,7 +29,6 @@ static PtrVector all_params; // X-macros #define PARAM_PREFIX #define PARAM_DEFAULT(X) = X - #include "config/user_config.hpp" #include "config/saved_grand_prix.hpp" diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index c11dea614..02bbf982d 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -183,7 +183,6 @@ public: return m_elements[key]; } }; // ListUserConfigParam -typedef MapUserConfigParam StringToStringUserConfigParam; typedef MapUserConfigParam IntToIntUserConfigParam; // ============================================================================ class IntUserConfigParam : public UserConfigParam @@ -418,11 +417,7 @@ namespace UserConfigParams PARAM_PREFIX StringUserConfigParam m_last_used_kart_group PARAM_DEFAULT( StringUserConfigParam("all", "last_kart_group", "Last selected kart group") ); - // ---- Gamemode setup - - - // ---- Wiimote data PARAM_PREFIX GroupUserConfigParam m_wiimote_group PARAM_DEFAULT( GroupUserConfigParam("WiiMote", @@ -758,12 +753,15 @@ namespace UserConfigParams "stun.voxalot.com", "stun.voxgratia.org", "stun.xten.com") ); + + // ---- Gamemode setup PARAM_PREFIX IntToIntUserConfigParam m_karts_per_gamemode PARAM_DEFAULT(IntToIntUserConfigParam("karts_per_gamemode", "The Number of karts per gamemode.", 1, std::make_pair(1100, 4) )); + PARAM_PREFIX BoolUserConfigParam m_log_packets PARAM_DEFAULT( BoolUserConfigParam(false, "log-network-packets", "If all network packets should be logged") ); From 7fff73afa6029124b1dd3da57d02e5a0b14a40d5 Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Sat, 28 Oct 2017 14:13:57 +1100 Subject: [PATCH 13/18] Clarifies the cause of compiler errors for some systems --- src/config/user_config.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index d8a529eb1..d431cca34 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -345,7 +345,8 @@ MapUserConfigParam::MapUserConfigParam(const char* param_name, // add the default list va_list arguments; va_start(arguments, nb_elements); - typedef std::pair pair_type; //Necessary to prevent compile error below + typedef std::pair pair_type; //Necessary to prevent compile error below. Causes errors on some compilers though + for (int i = 0; i < nb_elements; i++) { std::pair key_value_pair = va_arg(arguments, pair_type); m_elements.insert(key_value_pair); From 702d7f71c56eb9e467b03376017fc51271f6dcf2 Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Sat, 28 Oct 2017 18:41:26 +1100 Subject: [PATCH 14/18] Replaced pair with temporary struct, to ensure POD-typing --- src/config/user_config.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index d431cca34..fd2ad8459 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -345,11 +345,12 @@ MapUserConfigParam::MapUserConfigParam(const char* param_name, // add the default list va_list arguments; va_start(arguments, nb_elements); - typedef std::pair pair_type; //Necessary to prevent compile error below. Causes errors on some compilers though + + struct pair_type { T key; U value; }; for (int i = 0; i < nb_elements; i++) { - std::pair key_value_pair = va_arg(arguments, pair_type); - m_elements.insert(key_value_pair); + pair_type key_value_pair = va_arg(arguments, pair_type); + m_elements.insert(std::pair(key_value_pair.key, key_value_pair.value)); } va_end(arguments); // Cleans up the list } // MapUserConfigParam @@ -380,11 +381,12 @@ MapUserConfigParam::MapUserConfigParam(const char* param_name, // add the default list va_list arguments; va_start(arguments, nb_elements); - typedef std::pair PairType; //Necessary to prevent compile error below - + + struct pair_type { T key; U value; }; + for (int i = 0; i < nb_elements; i++) { - std::pair key_value_pair = va_arg(arguments, PairType); - m_elements.insert(key_value_pair); + pair_type key_value_pair = va_arg(arguments, pair_type); + m_elements.insert(std::pair(key_value_pair.key, key_value_pair.value)); } va_end(arguments); // Cleans up the list } // MapUserConfigParam From a094a5a3d6136ce6a71e896643eb76d33c0f2ffe Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Tue, 31 Oct 2017 11:15:38 +1100 Subject: [PATCH 15/18] Fix non newline brackets --- src/config/user_config.cpp | 12 ++++++++---- src/config/user_config.hpp | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index fd2ad8459..69b97e944 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -348,7 +348,8 @@ MapUserConfigParam::MapUserConfigParam(const char* param_name, struct pair_type { T key; U value; }; - for (int i = 0; i < nb_elements; i++) { + for (int i = 0; i < nb_elements; i++) + { pair_type key_value_pair = va_arg(arguments, pair_type); m_elements.insert(std::pair(key_value_pair.key, key_value_pair.value)); } @@ -405,7 +406,8 @@ void MapUserConfigParam::write(std::ofstream& stream) const // actual elements //for (int n = 0; n\n"; @@ -427,7 +429,8 @@ void MapUserConfigParam::findYourDataInAChildOf(const XMLNode* node) int attr_count = 0; child->get("Size", &attr_count); - for (const auto& kv : m_elements) { + for (const auto& kv : m_elements) + { std::pair elt; elt.first = kv.first; elt.second = kv.second; @@ -435,7 +438,8 @@ void MapUserConfigParam::findYourDataInAChildOf(const XMLNode* node) bool there = false; - for (const auto& kvRHS : m_elements) { + for (const auto& kvRHS : m_elements) + { if (elt.second == kvRHS.second) { there = true; diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index 02bbf982d..e39dc355e 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -179,7 +179,8 @@ public: m_elements = std::map(v); return m_elements; } - U& operator[] (const T key) { + U& operator[] (const T key) + { return m_elements[key]; } }; // ListUserConfigParam From 367eeb8c20a4915cc9b67b5fa1d29925a205351e Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Tue, 31 Oct 2017 17:57:19 +1100 Subject: [PATCH 16/18] fix innapropriate name changes --- src/race/race_manager.cpp | 32 ++++++++++++++++---------------- src/race/race_manager.hpp | 8 ++++---- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index 13483d965..6ce0f3882 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -66,7 +66,7 @@ RaceManager::RaceManager() { // Several code depends on this, e.g. kart_properties assert(DIFFICULTY_FIRST == 0); - m_default_num_karts = UserConfigParams::m_default_num_karts; + m_num_karts = UserConfigParams::m_default_num_karts; m_difficulty = DIFFICULTY_HARD; m_major_mode = MAJOR_MODE_SINGLE; m_minor_mode = MINOR_MODE_NORMAL_RACE; @@ -266,16 +266,16 @@ void RaceManager::setTrack(const std::string& track) */ void RaceManager::computeRandomKartList() { - int n = m_default_num_karts - (int)m_player_karts.size(); + int n = m_num_karts - (int)m_player_karts.size(); if(UserConfigParams::logMisc()) - Log::info("RaceManager", "AI karts count = %d for m_default_num_karts = %d and " - "m_player_karts.size() = %d", n, m_default_num_karts, m_player_karts.size()); + Log::info("RaceManager", "AI karts count = %d for m_num_karts = %d and " + "m_player_karts.size() = %d", n, m_num_karts, m_player_karts.size()); // If less kart selected than there are player karts, adjust the number of // karts to the minimum if(n<0) { - m_default_num_karts -= n; + m_num_karts -= n; n = 0; } @@ -363,20 +363,20 @@ void RaceManager::startNew(bool from_overworld) } // if grand prix // command line parameters: negative numbers=all karts - if(m_default_num_karts < 0 ) m_default_num_karts = stk_config->m_max_karts; - if((size_t)m_default_num_karts < m_player_karts.size()) - m_default_num_karts = (int)m_player_karts.size(); + if(m_num_karts < 0 ) m_num_karts = stk_config->m_max_karts; + if((size_t)m_num_karts < m_player_karts.size()) + m_num_karts = (int)m_player_karts.size(); // Create the kart status data structure to keep track of scores, times, ... // ========================================================================== m_kart_status.clear(); if (gk > 0) - m_default_num_karts += gk; + m_num_karts += gk; Log::verbose("RaceManager", "Nb of karts=%u, ghost karts:%u ai:%lu players:%lu\n", - (unsigned int) m_default_num_karts, gk, m_ai_kart_list.size(), m_player_karts.size()); + (unsigned int) m_num_karts, gk, m_ai_kart_list.size(), m_player_karts.size()); - assert((unsigned int)m_default_num_karts == gk+m_ai_kart_list.size()+m_player_karts.size()); + assert((unsigned int)m_num_karts == gk+m_ai_kart_list.size()+m_player_karts.size()); // First add the ghost karts (if any) // ---------------------------------------- @@ -550,7 +550,7 @@ void RaceManager::startNextRace() // The race is rerun, and the points and scores get reset ... but if // a kart hasn't finished the race at this stage, last_score and time // would be undefined. - for(int i=0; igetNumGhostKart(); + m_num_karts = ReplayPlay::get()->getNumGhostKart(); m_kart_status.clear(); Log::verbose("RaceManager", "%u ghost kart(s) for watching replay only\n", - (unsigned int)m_default_num_karts); + (unsigned int)m_num_karts); int init_gp_rank = 0; - for(int i = 0; i < m_default_num_karts; i++) + for(int i = 0; i < m_num_karts; i++) { m_kart_status.push_back(KartStatus(ReplayPlay::get()->getGhostKartName(i), i, -1, -1, init_gp_rank, KT_GHOST, PLAYER_DIFFICULTY_NORMAL)); diff --git a/src/race/race_manager.hpp b/src/race/race_manager.hpp index e218be502..7be0e8227 100644 --- a/src/race/race_manager.hpp +++ b/src/race/race_manager.hpp @@ -329,7 +329,7 @@ private: int m_track_number; GrandPrixData m_grand_prix; SavedGrandPrix* m_saved_gp; - int m_default_num_karts; + int m_num_karts; unsigned int m_num_spare_tire_karts; unsigned int m_num_finished_karts; unsigned int m_num_finished_players; @@ -469,7 +469,7 @@ public: // ------------------------------------------------------------------------ void setNumKarts(int num) { - m_default_num_karts = num; + m_num_karts = num; m_ai_kart_override = ""; m_ai_superpower = SUPERPOWER_NONE; } // setNumKarts @@ -492,7 +492,7 @@ public: // ------------------------------------------------------------------------ /** Returns the selected number of karts (selected number of players and * AI karts. */ - unsigned int getNumberOfKarts() const {return m_default_num_karts; } + unsigned int getNumberOfKarts() const {return m_num_karts; } // ------------------------------------------------------------------------ MajorRaceModeType getMajorMode() const { return m_major_mode; } // ------------------------------------------------------------------------ @@ -759,7 +759,7 @@ public: m_kart_status.push_back(KartStatus(name, 0, -1, -1, -1, KT_SPARE_TIRE, PLAYER_DIFFICULTY_NORMAL)); m_num_spare_tire_karts++; - m_default_num_karts++; + m_num_karts++; } // addSpareTireKart // ------------------------------------------------------------------------ void setSpareTireKartNum(unsigned int i) From 83c14fc0dc4befae46cfaf3cf7386c907f565e1d Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Tue, 31 Oct 2017 18:11:45 +1100 Subject: [PATCH 17/18] Added default num karts for GP --- src/states_screens/gp_info_screen.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/states_screens/gp_info_screen.cpp b/src/states_screens/gp_info_screen.cpp index c45fc6af8..5f6021ab6 100644 --- a/src/states_screens/gp_info_screen.cpp +++ b/src/states_screens/gp_info_screen.cpp @@ -235,7 +235,7 @@ void GPInfoScreen::init() // Avoid negative numbers (which can happen if e.g. the number of karts // in a previous race was lower than the number of players now. - int num_ai = UserConfigParams::m_default_num_karts - race_manager->getNumLocalPlayers(); + int num_ai = UserConfigParams::m_karts_per_gamemode[RaceManager::MAJOR_MODE_GRAND_PRIX] - race_manager->getNumLocalPlayers(); if (num_ai < 0) num_ai = 0; m_ai_kart_spinner->setValue(num_ai); race_manager->setNumKarts(num_ai + race_manager->getNumLocalPlayers()); @@ -345,7 +345,7 @@ void GPInfoScreen::eventCallback(Widget *, const std::string &name, { const int num_ai = m_ai_kart_spinner->getValue(); race_manager->setNumKarts( race_manager->getNumLocalPlayers() + num_ai ); - UserConfigParams::m_default_num_karts = race_manager->getNumLocalPlayers() + num_ai; + UserConfigParams::m_karts_per_gamemode[RaceManager::MAJOR_MODE_GRAND_PRIX] = race_manager->getNumLocalPlayers() + num_ai; } else if(name=="back") { From 98231956fb9ef94a52b918466e8dfe56e1e841e8 Mon Sep 17 00:00:00 2001 From: Fantasmos Date: Wed, 1 Nov 2017 08:38:34 +1100 Subject: [PATCH 18/18] rename to more appropriate variable --- src/config/user_config.hpp | 4 ++-- src/states_screens/gp_info_screen.cpp | 4 ++-- src/states_screens/track_info_screen.cpp | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index e39dc355e..b4e2491df 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -756,8 +756,8 @@ namespace UserConfigParams "stun.xten.com") ); // ---- Gamemode setup - PARAM_PREFIX IntToIntUserConfigParam m_karts_per_gamemode - PARAM_DEFAULT(IntToIntUserConfigParam("karts_per_gamemode", + PARAM_PREFIX IntToIntUserConfigParam m_num_karts_per_gamemode + PARAM_DEFAULT(IntToIntUserConfigParam("num_karts_per_gamemode", "The Number of karts per gamemode.", 1, std::make_pair(1100, 4) diff --git a/src/states_screens/gp_info_screen.cpp b/src/states_screens/gp_info_screen.cpp index 5f6021ab6..ee4412508 100644 --- a/src/states_screens/gp_info_screen.cpp +++ b/src/states_screens/gp_info_screen.cpp @@ -235,7 +235,7 @@ void GPInfoScreen::init() // Avoid negative numbers (which can happen if e.g. the number of karts // in a previous race was lower than the number of players now. - int num_ai = UserConfigParams::m_karts_per_gamemode[RaceManager::MAJOR_MODE_GRAND_PRIX] - race_manager->getNumLocalPlayers(); + int num_ai = UserConfigParams::m_num_karts_per_gamemode[RaceManager::MAJOR_MODE_GRAND_PRIX] - race_manager->getNumLocalPlayers(); if (num_ai < 0) num_ai = 0; m_ai_kart_spinner->setValue(num_ai); race_manager->setNumKarts(num_ai + race_manager->getNumLocalPlayers()); @@ -345,7 +345,7 @@ void GPInfoScreen::eventCallback(Widget *, const std::string &name, { const int num_ai = m_ai_kart_spinner->getValue(); race_manager->setNumKarts( race_manager->getNumLocalPlayers() + num_ai ); - UserConfigParams::m_karts_per_gamemode[RaceManager::MAJOR_MODE_GRAND_PRIX] = race_manager->getNumLocalPlayers() + num_ai; + UserConfigParams::m_num_karts_per_gamemode[RaceManager::MAJOR_MODE_GRAND_PRIX] = race_manager->getNumLocalPlayers() + num_ai; } else if(name=="back") { diff --git a/src/states_screens/track_info_screen.cpp b/src/states_screens/track_info_screen.cpp index 4cec05e86..0001cc0f6 100644 --- a/src/states_screens/track_info_screen.cpp +++ b/src/states_screens/track_info_screen.cpp @@ -168,7 +168,7 @@ void TrackInfoScreen::init() { m_ai_kart_spinner->setActive(true); - int num_ai = UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] - local_players; + int num_ai = UserConfigParams::m_num_karts_per_gamemode[race_manager->getMinorMode()] - local_players; // Avoid negative numbers (which can happen if e.g. the number of karts // in a previous race was lower than the number of players now. @@ -245,7 +245,7 @@ void TrackInfoScreen::init() m_ai_kart_spinner->setActive(false); race_manager->setNumKarts(race_manager->getNumLocalPlayers()); - UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumLocalPlayers(); + UserConfigParams::m_num_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumLocalPlayers(); } else if (record_available) { @@ -373,10 +373,10 @@ void TrackInfoScreen::onEnterPressedInternal() num_ai = m_ai_kart_spinner->getValue(); - if (UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] != (local_players + num_ai)) + if (UserConfigParams::m_num_karts_per_gamemode[race_manager->getMinorMode()] != (local_players + num_ai)) { race_manager->setNumKarts(local_players + num_ai); - UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] = local_players + num_ai; + UserConfigParams::m_num_karts_per_gamemode[race_manager->getMinorMode()] = local_players + num_ai; } // Disable accidentally unlocking of a challenge @@ -426,7 +426,7 @@ void TrackInfoScreen::eventCallback(Widget* widget, const std::string& name, { m_ai_kart_spinner->setActive(false); race_manager->setNumKarts(race_manager->getNumLocalPlayers()); - UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumLocalPlayers(); + UserConfigParams::m_num_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumLocalPlayers(); } else { @@ -445,7 +445,7 @@ void TrackInfoScreen::eventCallback(Widget* widget, const std::string& name, { const int num_ai = m_ai_kart_spinner->getValue(); race_manager->setNumKarts( race_manager->getNumLocalPlayers() + num_ai ); - UserConfigParams::m_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumLocalPlayers() + num_ai; + UserConfigParams::m_num_karts_per_gamemode[race_manager->getMinorMode()] = race_manager->getNumLocalPlayers() + num_ai; updateHighScores(); } } // eventCallback