diff --git a/src/game_config_manager.cpp b/src/game_config_manager.cpp index 147e9408c28..673f62b444c 100644 --- a/src/game_config_manager.cpp +++ b/src/game_config_manager.cpp @@ -54,9 +54,24 @@ game_config_manager::~game_config_manager() resources::config_manager = NULL; } +void game_config_manager::add_define(const std::string name, const bool add) +{ + defines_.push_back(std::make_pair(name, add)); +} + +void game_config_manager::add_cache_define(const std::string name) +{ + cache_.add_define(name); +} + +void game_config_manager::clear_cache_defines() +{ + cache_.clear_defines(); +} + bool game_config_manager::init_config(const bool force, const bool jump_to_editor) { - load_game_cfg(force); + load_game_cfg(true, force); // make sure that multiplayer mode is set if command line parameter is selected if (cmdline_opts_.multiplayer) @@ -86,8 +101,11 @@ bool game_config_manager::init_config(const bool force, const bool jump_to_edito return true; } -void game_config_manager::load_game_cfg(const bool force) +void game_config_manager::load_game_cfg(const bool clear_cache_defines, const bool force) { + if (clear_cache_defines) + cache_.clear_defines(); + // scoped defines typedef boost::shared_ptr define_ptr; std::deque defines; @@ -267,13 +285,3 @@ void game_config_manager::reload_changed_game_config(const bool jump_to_editor) clear_binary_paths_cache(); init_config(true, jump_to_editor); } - -void game_config_manager::add_define(const std::string name, const bool add) -{ - defines_.push_back(std::make_pair(name, add)); -} - -void game_config_manager::add_cache_define(const std::string name) -{ - cache_.add_define(name); -} diff --git a/src/game_config_manager.hpp b/src/game_config_manager.hpp index 3ea7fa8469a..420c1ae3d77 100644 --- a/src/game_config_manager.hpp +++ b/src/game_config_manager.hpp @@ -34,12 +34,13 @@ public: void add_define(const std::string name, const bool add = true); void add_cache_define(const std::string name); + void clear_cache_defines(); + bool init_config(const bool force = false, const bool jump_to_editor = false); - void load_game_cfg(const bool force = false); + void load_game_cfg(const bool clear_cache_defines = true, const bool force = false); void reload_changed_game_config(const bool jump_to_editor = false); protected: - game_config::config_cache& cache() { return cache_; } binary_paths_manager& bin_paths_manager() { return paths_manager_; } private: diff --git a/src/game_controller.cpp b/src/game_controller.cpp index b1755e4741d..b6e62f862e4 100644 --- a/src/game_controller.cpp +++ b/src/game_controller.cpp @@ -276,8 +276,6 @@ game_controller::game_controller(const commandline_options& cmdline_opts, const bool game_controller::init_config(const bool force) { - resources::config_manager->cache().clear_defines(); - return resources::config_manager->init_config(force, jump_to_editor_); } @@ -298,7 +296,7 @@ bool game_controller::play_test() state_.classification().campaign_define = "TEST"; resources::config_manager->add_cache_define("TEST"); - resources::config_manager->load_game_cfg(); + resources::config_manager->load_game_cfg(false); resources::config_manager->bin_paths_manager().set_paths(game_config()); @@ -317,7 +315,6 @@ bool game_controller::play_screenshot_mode() return true; } - resources::config_manager->cache().clear_defines(); resources::config_manager->add_define("EDITOR"); resources::config_manager->load_game_cfg(); const binary_paths_manager bin_paths_manager(game_config()); @@ -339,8 +336,6 @@ bool game_controller::load_game() try { load.load_game(game::load_game_exception::game, game::load_game_exception::show_replay, game::load_game_exception::cancel_orders, game::load_game_exception::select_difficulty, game::load_game_exception::difficulty); - resources::config_manager->cache().clear_defines(); - resources::config_manager->add_define(load.get_difficulty()); resources::config_manager->add_define(state_.classification().campaign_define, !state_.classification().campaign_define.empty()); resources::config_manager->add_define("MULTIPLAYER", state_.classification().campaign_define.empty() && (state_.classification().campaign_type == "multiplayer")); @@ -353,7 +348,6 @@ bool game_controller::load_game() try { resources::config_manager->load_game_cfg(); } catch(config::error&) { - resources::config_manager->cache().clear_defines(); resources::config_manager->load_game_cfg(); return false; } @@ -452,7 +446,7 @@ void game_controller::set_tutorial() state_.classification().campaign_type = "tutorial"; state_.carryover_sides_start["next_scenario"] = "tutorial"; state_.classification().campaign_define = "TUTORIAL"; - resources::config_manager->cache().clear_defines(); + resources::config_manager->clear_cache_defines(); resources::config_manager->add_define("TUTORIAL"); } @@ -577,11 +571,11 @@ bool game_controller::new_campaign() } state_.carryover_sides_start["difficulty"] = difficulties[difficulty]; - resources::config_manager->cache().clear_defines(); + resources::config_manager->clear_cache_defines(); resources::config_manager->add_define(difficulties[difficulty]); } else { //clear even when there is no difficulty - resources::config_manager->cache().clear_defines(); + resources::config_manager->clear_cache_defines(); } state_.classification().campaign_define = campaign["define"].str(); @@ -734,7 +728,6 @@ bool game_controller::play_multiplayer() } /* do */ { - resources::config_manager->cache().clear_defines(); resources::config_manager->add_define(state_.classification().campaign_define); resources::config_manager->load_game_cfg(); events::discard_input(); // prevent the "keylogger" effect @@ -810,7 +803,6 @@ bool game_controller::play_multiplayer_commandline() state_.classification().campaign_type = "multiplayer"; state_.classification().campaign_define = "MULTIPLAYER"; - resources::config_manager->cache().clear_defines(); resources::config_manager->add_define(state_.classification().campaign_define); resources::config_manager->load_game_cfg(); events::discard_input(); // prevent the "keylogger" effect @@ -862,9 +854,8 @@ void game_controller::launch_game(RELOAD_GAME_DATA reload) resources::config_manager->add_define(*i); } try { - resources::config_manager->load_game_cfg(); + resources::config_manager->load_game_cfg(false); } catch(config::error&) { - resources::config_manager->cache().clear_defines(); resources::config_manager->load_game_cfg(); return; } @@ -910,7 +901,6 @@ void game_controller::play_replay() editor::EXIT_STATUS game_controller::start_editor(const std::string& filename) { while(true){ - resources::config_manager->cache().clear_defines(); resources::config_manager->add_define("EDITOR"); resources::config_manager->load_game_cfg(); const binary_paths_manager bin_paths_manager(game_config());