X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsupertux%2Fgameconfig.cpp;h=c7d7778b8a1576c2acbab631845bdf256c998706;hb=a351cbfc2a547e3407cf78fbcc93e585cac486d4;hp=add3908f8bd49c513b9fa53db74a86fbb1fa322f;hpb=cfebd35f0db1f9812bdf7aaebedc199eb90eea3c;p=supertux.git diff --git a/src/supertux/gameconfig.cpp b/src/supertux/gameconfig.cpp index add3908f8..c7d7778b8 100644 --- a/src/supertux/gameconfig.cpp +++ b/src/supertux/gameconfig.cpp @@ -19,18 +19,21 @@ #include #include "addon/addon_manager.hpp" -#include "control/joystickkeyboardcontroller.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(800, 600), - window_size(800, 600), + fullscreen_size(0, 0), + fullscreen_refresh_rate(0), + window_size(1280, 800), aspect_size(0, 0), // auto detect - magnification(1.0f), + magnification(0.0f), use_fullscreen(false), video(VideoSystem::AUTO_VIDEO), try_vsync(true), @@ -38,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) { } @@ -58,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); @@ -75,12 +87,15 @@ Config::load() config_video_lisp->get("fullscreen_width", fullscreen_size.width); config_video_lisp->get("fullscreen_height", fullscreen_size.height); + config_video_lisp->get("fullscreen_refresh_rate", fullscreen_refresh_rate); config_video_lisp->get("window_width", window_size.width); config_video_lisp->get("window_height", window_size.height); config_video_lisp->get("aspect_width", aspect_size.width); config_video_lisp->get("aspect_height", aspect_size.height); + + config_video_lisp->get("magnification", magnification); } const lisp::Lisp* config_audio_lisp = config_lisp->get_lisp("audio"); @@ -90,13 +105,43 @@ Config::load() } const lisp::Lisp* config_control_lisp = config_lisp->get_lisp("control"); - if(config_control_lisp && g_jk_controller) { - g_jk_controller->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; + } + } } } @@ -107,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"); @@ -118,6 +165,7 @@ Config::save() writer.write("fullscreen_width", fullscreen_size.width); writer.write("fullscreen_height", fullscreen_size.height); + writer.write("fullscreen_refresh_rate", fullscreen_refresh_rate); writer.write("window_width", window_size.width); writer.write("window_height", window_size.height); @@ -125,6 +173,8 @@ Config::save() writer.write("aspect_width", aspect_size.width); writer.write("aspect_height", aspect_size.height); + writer.write("magnification", magnification); + writer.end_list("video"); writer.start_list("audio"); @@ -132,14 +182,26 @@ Config::save() writer.write("music_enabled", music_enabled); writer.end_list("audio"); - if(g_jk_controller) { - writer.start_list("control"); - g_jk_controller->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");