X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fsupertux%2Fgameconfig.cpp;h=c7d7778b8a1576c2acbab631845bdf256c998706;hb=7ebef4bb8c5483983cbf870396541a5ec36ac31e;hp=8b41febff58dbb471f5e05adec0c5ca8542f82b5;hpb=1da433ffd19f98acd8475c4e449de761440d99f8;p=supertux.git diff --git a/src/supertux/gameconfig.cpp b/src/supertux/gameconfig.cpp index 8b41febff..c7d7778b8 100644 --- a/src/supertux/gameconfig.cpp +++ b/src/supertux/gameconfig.cpp @@ -21,15 +21,17 @@ #include "addon/addon_manager.hpp" #include "control/input_manager.hpp" #include "lisp/writer.hpp" +#include "lisp/list_iterator.hpp" #include "lisp/parser.hpp" #include "util/reader.hpp" +#include "util/log.hpp" #include "supertux/globals.hpp" Config::Config() : profile(1), fullscreen_size(0, 0), fullscreen_refresh_rate(0), - window_size(800, 600), + window_size(1280, 800), aspect_size(0, 0), // auto detect magnification(0.0f), use_fullscreen(false), @@ -39,12 +41,16 @@ Config::Config() : sound_enabled(true), music_enabled(true), console_enabled(false), - random_seed(0), // set by time(), by default (unless in config) + random_seed(0), // set by time(), by default (unless in config) start_level(), enable_script_debugger(false), start_demo(), record_demo(), - locale() + locale(), + keyboard_config(), + joystick_config(), + addons(), + developer_mode(false) { } @@ -59,15 +65,20 @@ Config::load() const lisp::Lisp* config_lisp = root->get_lisp("supertux-config"); if(!config_lisp) + { throw std::runtime_error("File is not a supertux-config file"); + } + config_lisp->get("profile", profile); config_lisp->get("show_fps", show_fps); config_lisp->get("console", console_enabled); + config_lisp->get("developer", developer_mode); config_lisp->get("locale", locale); config_lisp->get("random_seed", random_seed); const lisp::Lisp* config_video_lisp = config_lisp->get_lisp("video"); - if(config_video_lisp) { + if(config_video_lisp) + { config_video_lisp->get("fullscreen", use_fullscreen); std::string video_string; config_video_lisp->get("video", video_string); @@ -83,7 +94,7 @@ Config::load() config_video_lisp->get("aspect_width", aspect_size.width); config_video_lisp->get("aspect_height", aspect_size.height); - + config_video_lisp->get("magnification", magnification); } @@ -94,13 +105,43 @@ Config::load() } const lisp::Lisp* config_control_lisp = config_lisp->get_lisp("control"); - if(config_control_lisp && g_input_manager) { - g_input_manager->read(*config_control_lisp); + if (config_control_lisp) + { + const lisp::Lisp* keymap_lisp = config_control_lisp->get_lisp("keymap"); + if (keymap_lisp) + { + keyboard_config.read(*keymap_lisp); + } + + const lisp::Lisp* joystick_lisp = config_control_lisp->get_lisp("joystick"); + if (joystick_lisp) + { + joystick_config.read(*joystick_lisp); + } } const lisp::Lisp* config_addons_lisp = config_lisp->get_lisp("addons"); - if(config_addons_lisp) { - AddonManager::get_instance().read(*config_addons_lisp); + if (config_addons_lisp) + { + lisp::ListIterator iter(config_addons_lisp); + while(iter.next()) + { + const std::string& token = iter.item(); + if (token == "addon") + { + std::string id; + bool enabled = false; + if (iter.lisp()->get("id", id) && + iter.lisp()->get("enabled", enabled)) + { + addons.push_back({id, enabled}); + } + } + else + { + log_warning << "Unknown token in config file: " << token << std::endl; + } + } } } @@ -111,8 +152,10 @@ Config::save() writer.start_list("supertux-config"); + writer.write("profile", profile); writer.write("show_fps", show_fps); writer.write("console", console_enabled); + writer.write("developer", developer_mode); writer.write("locale", locale); writer.start_list("video"); @@ -129,7 +172,7 @@ Config::save() writer.write("aspect_width", aspect_size.width); writer.write("aspect_height", aspect_size.height); - + writer.write("magnification", magnification); writer.end_list("video"); @@ -139,14 +182,26 @@ Config::save() writer.write("music_enabled", music_enabled); writer.end_list("audio"); - if(g_input_manager) { - writer.start_list("control"); - g_input_manager->write(writer); - writer.end_list("control"); + writer.start_list("control"); + { + writer.start_list("keymap"); + keyboard_config.write(writer); + writer.end_list("keymap"); + + writer.start_list("joystick"); + joystick_config.write(writer); + writer.end_list("joystick"); } + writer.end_list("control"); writer.start_list("addons"); - AddonManager::get_instance().write(writer); + for(auto addon : addons) + { + writer.start_list("addon"); + writer.write("id", addon.id); + writer.write("enabled", addon.enabled); + writer.end_list("addon"); + } writer.end_list("addons"); writer.end_list("supertux-config");