X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgameconfig.cpp;h=d3c589678b5d8639059473b2e39a5798a93bc9bf;hb=403276e51afda11d0738be756025411d9103a6ed;hp=2387c8cf88329d3f5b93d399daf7293cba5c8b04;hpb=60908c905544776c376421b8d3e12eeb936c068f;p=supertux.git diff --git a/src/gameconfig.cpp b/src/gameconfig.cpp index 2387c8cf8..d3c589678 100644 --- a/src/gameconfig.cpp +++ b/src/gameconfig.cpp @@ -1,7 +1,7 @@ -// $Id: configfile.cpp 2212 2004-11-28 14:57:45Z matzebraun $ +// $Id$ // // SuperTux - A Jump'n Run -// Copyright (C) 2004 Michael George +// Copyright (C) 2006 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -18,40 +18,50 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include -#include "gameconfig.h" +#include "gameconfig.hpp" -#include +#include #include #include -#include -#include -#include "audio/sound_manager.h" -#include "lisp/parser.h" -#include "lisp/lisp.h" -#include "lisp/writer.h" -#include "control/joystickkeyboardcontroller.h" -#include "resources.h" -#include "main.h" +#include "lisp/parser.hpp" +#include "lisp/lisp.hpp" +#include "lisp/writer.hpp" +#include "control/joystickkeyboardcontroller.hpp" +#include "resources.hpp" +#include "main.hpp" +#include "addon/addon_manager.hpp" Config* config = 0; Config::Config() { - use_fullscreen = true; + profile = 1; + use_fullscreen = false; + video = AUTO_VIDEO; + try_vsync = true; show_fps = false; sound_enabled = true; music_enabled = true; - cheats_enabled = false; + console_enabled = false; + random_seed = 0; // set by time(), by default (unless in config) - screenwidth = 800; - screenheight = 600; - use_gl = true; + window_width = 800; + window_height = 600; - audio_frequency = MIX_DEFAULT_FREQUENCY; - audio_channels = MIX_DEFAULT_CHANNELS; - audio_chunksize = 2048; - audio_voices = MIX_CHANNELS; + fullscreen_width = 800; + fullscreen_height = 600; + + projection_width = 800; + projection_height = 600; + scale_projection = true; + + aspect_width = 4; + aspect_height = 3; + + enable_script_debugger = false; + + locale = ""; // autodetect } Config::~Config() @@ -61,68 +71,90 @@ void Config::load() { lisp::Parser parser; - std::auto_ptr root (parser.parse(user_dir + "/config")); + const lisp::Lisp* root = parser.parse("config"); 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("show_fps", show_fps); - config_lisp->get("cheats", cheats_enabled); + config_lisp->get("console", console_enabled); + 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) { config_video_lisp->get("fullscreen", use_fullscreen); - config_video_lisp->get("width", screenwidth); - config_video_lisp->get("height", screenheight); + std::string video_string; + config_video_lisp->get("video", video_string); + video = get_video_system(video_string); + config_video_lisp->get("vsync", try_vsync); + + config_video_lisp->get("fullscreen_width", fullscreen_width); + config_video_lisp->get("fullscreen_height", fullscreen_height); + + config_video_lisp->get("window_width", window_width); + config_video_lisp->get("window_height", window_height); + + config_video_lisp->get("projection_width", projection_width); + config_video_lisp->get("projection_height", projection_height); + config_video_lisp->get("scale_projection", scale_projection); + + config_video_lisp->get("aspect_width", aspect_width); + config_video_lisp->get("aspect_height", aspect_height); } const lisp::Lisp* config_audio_lisp = config_lisp->get_lisp("audio"); if(config_audio_lisp) { config_audio_lisp->get("sound_enabled", sound_enabled); config_audio_lisp->get("music_enabled", music_enabled); - config_audio_lisp->get("frequency", audio_frequency); - config_audio_lisp->get("channels", audio_channels); - config_audio_lisp->get("voices", audio_voices); - config_audio_lisp->get("chunksize", audio_chunksize); } const lisp::Lisp* config_control_lisp = config_lisp->get_lisp("control"); if(config_control_lisp && main_controller) { main_controller->read(*config_control_lisp); } + + const lisp::Lisp* config_addons_lisp = config_lisp->get_lisp("addons"); + if(config_addons_lisp) { + AddonManager::get_instance().read_config(*config_addons_lisp); + } } void Config::save() { - std::string configfile = user_dir + "/config"; - std::ofstream file( (user_dir + "/config").c_str() ); - if(!file.good()) { - std::stringstream msg; - msg << "Couldn't write config file '" << configfile << "'"; - throw std::runtime_error(msg.str()); - } - lisp::Writer writer(file); + lisp::Writer writer("config"); writer.start_list("supertux-config"); writer.write_bool("show_fps", show_fps); - writer.write_bool("cheats", cheats_enabled); + writer.write_bool("console", console_enabled); + writer.write_string("locale", locale); writer.start_list("video"); writer.write_bool("fullscreen", use_fullscreen); - writer.write_int("width", screenwidth); - writer.write_int("height", screenheight); + writer.write_string("video", get_video_string(video)); + writer.write_bool("vsync", try_vsync); + + writer.write_int("fullscreen_width", fullscreen_width); + writer.write_int("fullscreen_height", fullscreen_height); + + writer.write_int("window_width", window_width); + writer.write_int("window_height", window_height); + + writer.write_int("projection_width", projection_width); + writer.write_int("projection_height", projection_height); + writer.write_bool("scale_projection", scale_projection); + + writer.write_int("aspect_width", aspect_width); + writer.write_int("aspect_height", aspect_height); + writer.end_list("video"); writer.start_list("audio"); writer.write_bool("sound_enabled", sound_enabled); writer.write_bool("music_enabled", music_enabled); - writer.write_int("frequency", audio_frequency); - writer.write_int("channels", audio_channels); - writer.write_int("voices", audio_voices); - writer.write_int("chunksize", audio_chunksize); writer.end_list("audio"); if(main_controller) { @@ -130,6 +162,10 @@ Config::save() main_controller->write(writer); writer.end_list("control"); } - + + writer.start_list("addons"); + AddonManager::get_instance().write_config(writer); + writer.end_list("addons"); + writer.end_list("supertux-config"); }