game_preferences.cpp

Go to the documentation of this file.
00001 /* $Id: game_preferences.cpp 54051 2012-04-30 21:52:38Z brilliand $ */
00002 /*
00003    Copyright (C) 2003 - 2012 by David White <dave@whitevine.net>
00004    Part of the Battle for Wesnoth Project http://www.wesnoth.org/
00005 
00006    This program is free software; you can redistribute it and/or modify
00007    it under the terms of the GNU General Public License as published by
00008    the Free Software Foundation; either version 2 of the License, or
00009    (at your option) any later version.
00010    This program is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY.
00012 
00013    See the COPYING file for more details.
00014 */
00015 
00016 #include "global.hpp"
00017 
00018 #define GETTEXT_DOMAIN "wesnoth-lib"
00019 
00020 #include "foreach.hpp"
00021 #include "game_display.hpp"
00022 #include "game_preferences.hpp"
00023 #include "gamestatus.hpp"
00024 #include "gettext.hpp"
00025 #include "log.hpp"
00026 #include "map.hpp"
00027 #include "network.hpp" // ping_timeout
00028 #include "serialization/string_utils.hpp"
00029 #include "settings.hpp"
00030 #include "unit.hpp"
00031 #include "unit_map.hpp"
00032 #include "wml_exception.hpp"
00033 
00034 static lg::log_domain log_config("config");
00035 #define ERR_CFG LOG_STREAM(err , log_config)
00036 
00037 namespace {
00038 
00039 bool message_private_on = false;
00040 
00041 bool haloes = true;
00042 
00043 std::set<std::string> encountered_units_set;
00044 std::set<t_translation::t_terrain> encountered_terrains_set;
00045 
00046 std::map<std::string, std::vector<std::string> > history_map;
00047 const unsigned max_history_saved = 50;
00048 
00049 std::set<std::string> friends;
00050 std::set<std::string> ignores;
00051 
00052 bool friends_initialized = false;
00053 bool ignores_initialized = false;
00054 
00055 bool authenticated = false;
00056 
00057 const char WRAP_CHAR = '@';
00058 const std::string EMPTY_WRAPPED_STRING = "@@";
00059 
00060 std::string wrap_credentials_field_value(const std::string& value)
00061 {
00062     return WRAP_CHAR + value + WRAP_CHAR;
00063 }
00064 
00065 std::string parse_wrapped_credentials_field(const std::string& raw)
00066 {
00067     if(raw.empty() || raw == EMPTY_WRAPPED_STRING) {
00068         // empty (wrapped or not)
00069         return raw;
00070     } else if(raw.length() < 2 || raw[0] != WRAP_CHAR || raw[raw.length() - 1] != WRAP_CHAR ) {
00071         // malformed/not wrapped (shouldn't happen)
00072         ERR_CFG << "malformed user credentials (did you manually edit the preferences file?)\n";
00073         return raw;
00074     }
00075 
00076     return raw.substr(1, raw.length() - 2);
00077 }
00078 
00079 } // anon namespace
00080 
00081 namespace preferences {
00082 
00083 manager::manager() :
00084     base()
00085 {
00086     set_music_volume(music_volume());
00087     set_sound_volume(sound_volume());
00088 
00089     set_show_haloes(preferences::get("show_haloes", true));
00090     if (!preferences::get("remember_timer_settings", false)) {
00091         preferences::erase("mp_countdown_init_time");
00092         preferences::erase("mp_countdown_reservoir_time");
00093         preferences::erase("mp_countdown_turn_bonus");
00094         preferences::erase("mp_countdown_action_bonus");
00095     }
00096 
00097     const std::vector<std::string> v = utils::split(preferences::get("encountered_units"));
00098     std::copy(v.begin(), v.end(),
00099             std::inserter(encountered_units_set, encountered_units_set.begin()));
00100 
00101     const t_translation::t_list terrain =
00102             t_translation::read_list(preferences::get("encountered_terrain_list"));
00103     std::copy(terrain.begin(), terrain.end(),
00104             std::inserter(encountered_terrains_set, encountered_terrains_set.begin()));
00105 
00106     if (const config &history = preferences::get_child("history"))
00107     {
00108 /* Structure of the history
00109     [history]
00110         [history_id]
00111             [line]
00112                 message = foobar
00113             [/line]
00114 */
00115         foreach (const config::any_child &h, history.all_children_range())
00116         {
00117             foreach (const config &l, h.cfg.child_range("line")) {
00118                 history_map[h.key].push_back(l["message"]);
00119             }
00120         }
00121     }
00122 
00123     network::ping_timeout = get_ping_timeout();
00124 }
00125 
00126 manager::~manager()
00127 {
00128     std::vector<std::string> v;
00129     std::copy(encountered_units_set.begin(), encountered_units_set.end(), std::back_inserter(v));
00130     preferences::set("encountered_units", utils::join(v));
00131     t_translation::t_list terrain;
00132     std::copy(encountered_terrains_set.begin(), encountered_terrains_set.end(),
00133               std::back_inserter(terrain));
00134     preferences::set("encountered_terrain_list", t_translation::write_list(terrain));
00135 
00136 /* Structure of the history
00137     [history]
00138         [history_id]
00139             [line]
00140                 message = foobar
00141             [/line]
00142 */
00143     config history;
00144     typedef std::pair<std::string, std::vector<std::string> > hack;
00145     foreach(const hack& history_id, history_map) {
00146 
00147         config history_id_cfg; // [history_id]
00148         foreach(const std::string& line, history_id.second) {
00149             config cfg; // [line]
00150 
00151             cfg["message"] = line;
00152             history_id_cfg.add_child("line", cfg);
00153         }
00154 
00155         history.add_child(history_id.first, history_id_cfg);
00156     }
00157     preferences::set_child("history", history);
00158 
00159     history_map.clear();
00160     encountered_units_set.clear();
00161     encountered_terrains_set.clear();
00162 }
00163 
00164 bool is_authenticated() {
00165     return authenticated;
00166 }
00167 
00168 void parse_admin_authentication(const std::string& sender, const std::string& message) {
00169     if(sender != "server") return;
00170     if(message.find("You are now recognized as an administrator.") == 0) {
00171         authenticated = true;
00172     } else if(message.find("You are no longer recognized as an administrator.") == 0) {
00173         authenticated = false;
00174     }
00175 }
00176 
00177 static void initialize_friends() {
00178     if(!friends_initialized) {
00179         std::vector<std::string> names = utils::split(preferences::get("friends"));
00180         std::set<std::string> tmp(names.begin(), names.end());
00181         friends.swap(tmp);
00182 
00183         friends_initialized = true;
00184     }
00185 }
00186 
00187 const std::set<std::string> & get_friends() {
00188     initialize_friends();
00189     return friends;
00190 }
00191 
00192 static void initialize_ignores() {
00193     if(!ignores_initialized) {
00194         std::vector<std::string> names = utils::split(preferences::get("ignores"));
00195         std::set<std::string> tmp(names.begin(), names.end());
00196         ignores.swap(tmp);
00197 
00198         ignores_initialized = true;
00199     }
00200 }
00201 
00202 const std::set<std::string> & get_ignores() {
00203     return ignores;
00204 }
00205 
00206 bool add_friend(const std::string& nick) {
00207     if (!utils::isvalid_wildcard(nick)) return false;
00208     friends.insert(nick);
00209     preferences::set("friends", utils::join(friends));
00210     return true;
00211 }
00212 
00213 bool add_ignore(const std::string& nick) {
00214     if (!utils::isvalid_wildcard(nick)) return false;
00215     ignores.insert(nick);
00216     preferences::set("ignores", utils::join(ignores));
00217     return true;
00218 }
00219 
00220 void remove_friend(const std::string& nick) {
00221     std::set<std::string>::iterator i = friends.find(nick);
00222     if(i != friends.end()) {
00223         friends.erase(i);
00224         preferences::set("friends", utils::join(friends));
00225     }
00226 }
00227 
00228 void remove_ignore(const std::string& nick) {
00229     std::set<std::string>::iterator i = ignores.find(nick);
00230     if(i != ignores.end()) {
00231         ignores.erase(i);
00232         preferences::set("ignores", utils::join(ignores));
00233     }
00234 }
00235 
00236 bool is_friend(const std::string& nick) {
00237     initialize_friends();
00238     return friends.find(nick) != friends.end();
00239 }
00240 
00241 bool is_ignored(const std::string& nick) {
00242     initialize_ignores();
00243     return ignores.find(nick) != ignores.end();
00244 }
00245 
00246 void add_completed_campaign(const std::string& campaign_id) {
00247     std::vector<std::string> completed = utils::split(preferences::get("completed_campaigns"));
00248 
00249     if(std::find(completed.begin(), completed.end(), campaign_id) != completed.end())
00250         return;
00251 
00252     completed.push_back(campaign_id);
00253     preferences::set("completed_campaigns", utils::join(completed));
00254 }
00255 
00256 bool is_campaign_completed(const std::string& campaign_id) {
00257     std::vector<std::string> completed = utils::split(preferences::get("completed_campaigns"));
00258 
00259     return std::find(completed.begin(), completed.end(), campaign_id) != completed.end();
00260 }
00261 
00262 bool parse_should_show_lobby_join(const std::string &sender, const std::string &message)
00263 {
00264     // If it's actually not a lobby join message return true (show it).
00265     if (sender != "server") return true;
00266     std::string::size_type pos = message.find(" has logged into the lobby");
00267     if (pos == std::string::npos) return true;
00268     int lj = lobby_joins();
00269     if (lj == SHOW_NONE) return false;
00270     if (lj == SHOW_ALL) return true;
00271     return is_friend(message.substr(0, pos));
00272 }
00273 
00274 int lobby_joins()
00275 {
00276     std::string pref = preferences::get("lobby_joins");
00277     if (pref == "friends") {
00278         return SHOW_FRIENDS;
00279     } else if (pref == "all") {
00280         return SHOW_ALL;
00281     } else if (pref == "none") {
00282         return SHOW_NONE;
00283     } else {
00284         return SHOW_FRIENDS;
00285     }
00286 }
00287 
00288 
00289 void _set_lobby_joins(int show)
00290 {
00291     if (show == SHOW_FRIENDS) {
00292         preferences::set("lobby_joins", "friends");
00293     } else if (show == SHOW_ALL) {
00294         preferences::set("lobby_joins", "all");
00295     } else if (show == SHOW_NONE) {
00296         preferences::set("lobby_joins", "none");
00297     }
00298 }
00299 
00300 bool new_lobby()
00301 {
00302     return get("new_lobby", false);
00303 }
00304 
00305 void set_new_lobby(bool value)
00306 {
00307     preferences::set("new_lobby", value);
00308 }
00309 
00310 const std::vector<game_config::server_info>& server_list()
00311 {
00312     static std::vector<game_config::server_info> pref_servers;
00313     if(pref_servers.empty()) {
00314         std::vector<game_config::server_info> &game_servers = game_config::server_list;
00315         VALIDATE(!game_servers.empty(), _("No server has been defined."));
00316         pref_servers.insert(pref_servers.begin(), game_servers.begin(), game_servers.end());
00317         foreach (const config &server, get_prefs()->child_range("server")) {
00318             game_config::server_info sinf;
00319             sinf.name = server["name"].str();
00320             sinf.address = server["address"].str();
00321             pref_servers.push_back(sinf);
00322         }
00323     }
00324     return pref_servers;
00325 }
00326 
00327 std::string network_host()
00328 {
00329     const std::string res = preferences::get("host");
00330     if(res.empty()) {
00331         return server_list().front().address;
00332     } else {
00333         return res;
00334     }
00335 }
00336 
00337 void set_network_host(const std::string& host)
00338 {
00339     preferences::set("host", host);
00340 }
00341 
00342 unsigned int get_ping_timeout()
00343 {
00344     return lexical_cast_default<unsigned>(preferences::get("ping_timeout"), 0);
00345 }
00346 
00347 std::string campaign_server()
00348 {
00349     if(!preferences::get("campaign_server").empty()) {
00350         return preferences::get("campaign_server");
00351     } else {
00352         return "add-ons.wesnoth.org";
00353     }
00354 }
00355 
00356 void set_campaign_server(const std::string& host)
00357 {
00358     preferences::set("campaign_server", host);
00359 }
00360 
00361 bool wrap_password()
00362 {
00363     const bool have_old_password_format =
00364         (!preferences::have_setting("password_is_wrapped")) && preferences::have_setting("password");
00365     return have_old_password_format ? false : preferences::get("password_is_wrapped", true);
00366 }
00367 
00368 void set_wrap_password(bool wrap)
00369 {
00370     preferences::set("password_is_wrapped", wrap);
00371 }
00372 
00373 bool wrap_login()
00374 {
00375     const bool have_old_login_format =
00376         (!preferences::have_setting("login_is_wrapped")) && preferences::have_setting("login");
00377     return have_old_login_format ? false : preferences::get("login_is_wrapped", true);
00378 }
00379 
00380 void set_wrap_login(bool wrap)
00381 {
00382     preferences::set("login_is_wrapped", wrap);
00383 }
00384 
00385 std::string login()
00386 {
00387     const std::string res = preferences::get("login");
00388     if(res.empty()) {
00389         char* const login = getenv("USER");
00390         if(login != NULL) {
00391             return login;
00392         }
00393 
00394         if(res.empty()) {
00395             return _("player");
00396         }
00397     }
00398 
00399     if(!wrap_login()) {
00400         return res;
00401     } else {
00402         return parse_wrapped_credentials_field(res);
00403     }
00404 }
00405 
00406 void set_login(const std::string& username)
00407 {
00408     set_wrap_login(true);
00409     preferences::set("login", wrap_credentials_field_value(username));
00410 }
00411 
00412 namespace prv {
00413     std::string password;
00414 }
00415 
00416 std::string password()
00417 {
00418     if(remember_password()) {
00419         const std::string saved_pass = preferences::get("password");
00420         if(!wrap_password()) {
00421             return saved_pass;
00422         } else {
00423             return parse_wrapped_credentials_field(saved_pass);
00424         }
00425     } else {
00426         return prv::password;
00427     }
00428 }
00429 
00430 void set_password(const std::string& password)
00431 {
00432     prv::password = password;
00433     if(remember_password()) {
00434         set_wrap_password(true);
00435         preferences::set("password", wrap_credentials_field_value(password));
00436     }
00437 }
00438 
00439 bool remember_password()
00440 {
00441     return preferences::get("remember_password", false);
00442 }
00443 
00444 void set_remember_password(bool remember)
00445 {
00446     preferences::set("remember_password", remember);
00447     preferences::set("password", remember ? prv::password : "");
00448 }
00449 
00450 bool turn_dialog()
00451 {
00452     return preferences::get("turn_dialog", false);
00453 }
00454 
00455 void set_turn_dialog(bool ison)
00456 {
00457     preferences::set("turn_dialog", ison);
00458 }
00459 
00460 bool enable_whiteboard_mode_on_start()
00461 {
00462     return preferences::get("enable_planning_mode_on_start", false);
00463 }
00464 
00465 void set_enable_whiteboard_mode_on_start(bool value)
00466 {
00467     preferences::set("enable_planning_mode_on_start", value);
00468 }
00469 
00470 bool hide_whiteboard()
00471 {
00472     return preferences::get("hide_whiteboard", false);
00473 }
00474 
00475 void set_hide_whiteboard(bool value)
00476 {
00477     preferences::set("hide_whiteboard", value);
00478 }
00479 
00480 bool show_combat()
00481 {
00482     return preferences::get("show_combat", true);
00483 }
00484 
00485 bool allow_observers()
00486 {
00487     return preferences::get("allow_observers", true);
00488 }
00489 
00490 void set_allow_observers(bool value)
00491 {
00492     preferences::set("allow_observers", value);
00493 }
00494 
00495 bool shuffle_sides()
00496 {
00497     return preferences::get("shuffle_sides", false);
00498 }
00499 
00500 void set_shuffle_sides(bool value)
00501 {
00502     preferences::set("shuffle_sides", value);
00503 }
00504 
00505 bool use_map_settings()
00506 {
00507     return preferences::get("mp_use_map_settings", true);
00508 }
00509 
00510 void set_use_map_settings(bool value)
00511 {
00512     preferences::set("mp_use_map_settings", value);
00513 }
00514 
00515 int mp_server_warning_disabled()
00516 {
00517     return lexical_cast_default<int>(preferences::get("mp_server_warning_disabled"), 0);
00518 }
00519 
00520 void set_mp_server_warning_disabled(int value)
00521 {
00522     preferences::set("mp_server_warning_disabled", value);
00523 }
00524 
00525 void set_mp_server_program_name(const std::string& path)
00526 {
00527     if (path.empty())
00528     {
00529         preferences::clear("mp_server_program_name");
00530     }
00531     else
00532     {
00533         preferences::set("mp_server_program_name", path);
00534     }
00535 }
00536 
00537 std::string get_mp_server_program_name()
00538 {
00539     return preferences::get("mp_server_program_name");
00540 }
00541 
00542 bool random_start_time()
00543 {
00544     return preferences::get("mp_random_start_time", true);
00545 }
00546 
00547 void set_random_start_time(bool value)
00548 {
00549     preferences::set("mp_random_start_time", value);
00550 }
00551 
00552 bool fog()
00553 {
00554     return preferences::get("mp_fog", true);
00555 }
00556 
00557 void set_fog(bool value)
00558 {
00559     preferences::set("mp_fog", value);
00560 }
00561 
00562 bool shroud()
00563 {
00564     return preferences::get("mp_shroud", false);
00565 }
00566 
00567 void set_shroud(bool value)
00568 {
00569     preferences::set("mp_shroud", value);
00570 }
00571 
00572 int turns()
00573 {
00574     return settings::get_turns(preferences::get("mp_turns"));
00575 }
00576 
00577 void set_turns(int value)
00578 {
00579     preferences::set("mp_turns", value);
00580 }
00581 
00582 bool skip_mp_replay()
00583 {
00584     return preferences::get("skip_mp_replay", false);
00585 }
00586 
00587 void set_skip_mp_replay(bool value)
00588 {
00589     preferences::set("skip_mp_replay", value);
00590 }
00591 
00592 bool countdown()
00593 {
00594     return preferences::get("mp_countdown", false);
00595 }
00596 
00597 void set_countdown(bool value)
00598 {
00599     preferences::set("mp_countdown", value);
00600 }
00601 
00602 int countdown_init_time()
00603 {
00604     return lexical_cast_in_range<int>
00605         (preferences::get("mp_countdown_init_time"), 270, 0, 1500);
00606 }
00607 
00608 void set_countdown_init_time(int value)
00609 {
00610     preferences::set("mp_countdown_init_time", value);
00611 }
00612 
00613 int countdown_reservoir_time()
00614 {
00615     return lexical_cast_in_range<int>(
00616         preferences::get("mp_countdown_reservoir_time"), 330, 30, 1500);
00617 }
00618 
00619 void set_countdown_reservoir_time(int value)
00620 {
00621     preferences::set("mp_countdown_reservoir_time", value);
00622 }
00623 
00624 int countdown_turn_bonus()
00625 {
00626     return lexical_cast_in_range<int>(
00627         preferences::get("mp_countdown_turn_bonus"), 60, 0, 300);
00628 }
00629 
00630 void set_countdown_turn_bonus(int value)
00631 {
00632     preferences::set("mp_countdown_turn_bonus", value);
00633 }
00634 
00635 int countdown_action_bonus()
00636 {
00637     return lexical_cast_in_range<int>(
00638         preferences::get("mp_countdown_action_bonus"), 13, 0, 30);
00639 }
00640 
00641 void set_countdown_action_bonus(int value)
00642 {
00643     preferences::set("mp_countdown_action_bonus", value);
00644 }
00645 
00646 int village_gold()
00647 {
00648     return settings::get_village_gold(preferences::get("mp_village_gold"));
00649 }
00650 
00651 void set_village_gold(int value)
00652 {
00653     preferences::set("mp_village_gold", value);
00654 }
00655 
00656 int village_support()
00657 {
00658     return settings::get_village_support(preferences::get("mp_village_support"));
00659 }
00660 
00661 void set_village_support(int value)
00662 {
00663     preferences::set("mp_village_support", lexical_cast<std::string>(value));
00664 }
00665 
00666 int xp_modifier()
00667 {
00668     return settings::get_xp_modifier(preferences::get("mp_xp_modifier"));
00669 }
00670 
00671 void set_xp_modifier(int value)
00672 {
00673     preferences::set("mp_xp_modifier", value);
00674 }
00675 
00676 int era()
00677 {
00678     return lexical_cast_default<int>(preferences::get("mp_era"), 0);
00679 }
00680 
00681 void set_era(int value)
00682 {
00683     preferences::set("mp_era", value);
00684 }
00685 
00686 int map()
00687 {
00688     return lexical_cast_default<int>(preferences::get("mp_map"), 0);
00689 }
00690 
00691 void set_map(int value)
00692 {
00693     preferences::set("mp_map", value);
00694 }
00695 
00696 bool show_ai_moves()
00697 {
00698     return preferences::get("show_ai_moves", true);
00699 }
00700 
00701 void set_show_ai_moves(bool value)
00702 {
00703     preferences::set("show_ai_moves", value);
00704 }
00705 
00706 void set_show_side_colors(bool value)
00707 {
00708     preferences::set("show_side_colors", value);
00709 }
00710 
00711 bool show_side_colors()
00712 {
00713     return preferences::get("show_side_colors", true);
00714 }
00715 
00716 void set_save_replays(bool value)
00717 {
00718     preferences::set("save_replays", value);
00719 }
00720 
00721 bool save_replays()
00722 {
00723     return preferences::get("save_replays", true);
00724 }
00725 
00726 void set_delete_saves(bool value)
00727 {
00728     preferences::set("delete_saves", value);
00729 }
00730 
00731 bool delete_saves()
00732 {
00733     return preferences::get("delete_saves", false);
00734 }
00735 
00736 void set_ask_delete_saves(bool value)
00737 {
00738     preferences::set("ask_delete", value);
00739 }
00740 
00741 bool ask_delete_saves()
00742 {
00743     return preferences::get("ask_delete", true);
00744 }
00745 
00746 void set_interrupt_when_ally_sighted(bool value)
00747 {
00748     preferences::set("ally_sighted_interrupts", value);
00749 }
00750 
00751 bool interrupt_when_ally_sighted()
00752 {
00753     return preferences::get("ally_sighted_interrupts", true);
00754 }
00755 
00756 int autosavemax()
00757 {
00758     return lexical_cast_default<int>(preferences::get("auto_save_max"), 10);
00759 }
00760 
00761 void set_autosavemax(int value)
00762 {
00763     preferences::set("auto_save_max", value);
00764 }
00765 
00766 std::string client_type()
00767 {
00768     return preferences::get("client_type") == "ai" ? "ai" : "human";
00769 }
00770 
00771 std::string theme()
00772 {
00773     if(non_interactive()) {
00774         static const std::string null_theme = "null";
00775         return null_theme;
00776     }
00777 
00778     std::string res = preferences::get("theme");
00779     if(res.empty()) {
00780         return "Default";
00781     }
00782 
00783     return res;
00784 }
00785 
00786 void set_theme(const std::string& theme)
00787 {
00788     if(theme != "null") {
00789         preferences::set("theme", theme);
00790     }
00791 }
00792 
00793 bool show_floating_labels()
00794 {
00795     return preferences::get("floating_labels", true);
00796 }
00797 
00798 void set_show_floating_labels(bool value)
00799 {
00800     preferences::set("floating_labels", value);
00801 }
00802 
00803 bool message_private()
00804 {
00805     return message_private_on;
00806 }
00807 
00808 void set_message_private(bool value)
00809 {
00810     message_private_on = value;
00811 }
00812 
00813 bool show_haloes()
00814 {
00815     return haloes;
00816 }
00817 
00818 void set_show_haloes(bool value)
00819 {
00820     haloes = value;
00821     preferences::set("show_haloes", value);
00822 }
00823 
00824 bool flip_time()
00825 {
00826     return preferences::get("flip_time", false);
00827 }
00828 
00829 void set_flip_time(bool value)
00830 {
00831     preferences::set("flip_time", value);
00832 }
00833 
00834 bool compress_saves()
00835 {
00836     return preferences::get("compress_saves", true);
00837 }
00838 
00839 bool startup_effect()
00840 {
00841     return preferences::get("startup_effect", false);
00842 }
00843 
00844 std::string get_chat_timestamp(const time_t& t) {
00845     if (chat_timestamping()) {
00846         if(preferences::use_twelve_hour_clock_format() == false) {
00847             return lg::get_timestamp(t, _("%H:%M")) + " ";
00848         }
00849         else {
00850             return lg::get_timestamp(t, _("%I:%M %p")) + " ";
00851         }
00852     }
00853     return "";
00854 }
00855 
00856 bool chat_timestamping() {
00857     return preferences::get("chat_timestamp", false);
00858 }
00859 
00860 void set_chat_timestamping(bool value) {
00861     preferences::set("chat_timestamp", value);
00862 }
00863 
00864 int chat_lines()
00865 {
00866     return lexical_cast_default<int>(preferences::get("chat_lines"), 6);
00867 }
00868 
00869 void set_chat_lines(int lines)
00870 {
00871     preferences::set("chat_lines", lines);
00872 }
00873 
00874 void set_chat_message_aging(const int aging)
00875 {
00876     preferences::set("chat_message_aging", aging);
00877 }
00878 
00879 int chat_message_aging()
00880 {
00881     return lexical_cast_default<int>(preferences::get("chat_message_aging"), 20);
00882 }
00883 
00884 bool show_all_units_in_help() {
00885     return preferences::get("show_all_units_in_help", false);
00886 }
00887 
00888 void set_show_all_units_in_help(bool value) {
00889     preferences::set("show_all_units_in_help", value);
00890 }
00891 
00892 std::set<std::string> &encountered_units() {
00893     return encountered_units_set;
00894 }
00895 
00896 std::set<t_translation::t_terrain> &encountered_terrains() {
00897     return encountered_terrains_set;
00898 }
00899 
00900 std::string custom_command() {
00901     return preferences::get("custom_command");
00902 }
00903 
00904 void set_custom_command(const std::string& command) {
00905     preferences::set("custom_command", command);
00906 }
00907 
00908 /**
00909  * Returns a pointer to the history vector associated with given id
00910  * making a new one if it doesn't exist.
00911  *
00912  * @todo FIXME only used for gui2. Could be used for the above histories.
00913  */
00914 std::vector<std::string>* get_history(const std::string& id) {
00915     return &history_map[id];
00916 }
00917 
00918 bool green_confirm()
00919 {
00920     std::string confirmation = preferences::get("confirm_end_turn");
00921 
00922     if (confirmation == "green" || confirmation == "yes")
00923         return true;
00924     return false;
00925 }
00926 
00927 bool yellow_confirm()
00928 {
00929     return preferences::get("confirm_end_turn") == "yellow";
00930 }
00931 
00932 bool confirm_no_moves()
00933 {
00934     //This is very non-intrusive so it is on by default
00935     const std::string confirmation = preferences::get("confirm_end_turn");
00936     return confirmation == "no_moves" || confirmation.empty();
00937 }
00938 
00939 
00940 void encounter_recruitable_units(std::vector<team>& teams){
00941     for (std::vector<team>::iterator help_team_it = teams.begin();
00942         help_team_it != teams.end(); ++help_team_it) {
00943         help_team_it->log_recruitable();
00944         std::copy(help_team_it->recruits().begin(), help_team_it->recruits().end(),
00945                   std::inserter(encountered_units_set, encountered_units_set.begin()));
00946     }
00947 }
00948 
00949 void encounter_start_units(unit_map& units){
00950     for (unit_map::const_iterator help_unit_it = units.begin();
00951          help_unit_it != units.end(); ++help_unit_it) {
00952         const std::string name = help_unit_it->type_id();
00953         encountered_units_set.insert(name);
00954     }
00955 }
00956 
00957 void encounter_recallable_units(std::vector<team>& teams){
00958     foreach(const team& t, teams) {
00959         foreach(const unit& u, t.recall_list()) {
00960             encountered_units_set.insert(u.type_id());
00961         }
00962     }
00963 }
00964 
00965 void encounter_map_terrain(gamemap& map){
00966     for (int map_x = 0; map_x < map.w(); ++map_x) {
00967         for (int map_y = 0; map_y < map.h(); ++map_y) {
00968             const t_translation::t_terrain t = map.get_terrain(map_location(map_x, map_y));
00969             preferences::encountered_terrains().insert(t);
00970             const t_translation::t_list& underlaying_list = map.underlying_union_terrain(map_location(map_x, map_y));
00971             for (std::vector<t_translation::t_terrain>::const_iterator ut = underlaying_list.begin(); ut != underlaying_list.end(); ++ut) {
00972                 preferences::encountered_terrains().insert(*ut);
00973             };
00974         }
00975     }
00976 }
00977 
00978 } // preferences namespace
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated by doxygen 1.7.1 on Fri May 25 2012 01:02:52 for The Battle for Wesnoth
Gna! | Forum | Wiki | CIA | devdocs