X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fsupertux%2Fmain.cpp;h=0913daeb93391b184d6c84b8d2a8e22809b83c2a;hb=48e40d99301be45d9a57f7db1866a5021b708f93;hp=6bab73244e723c90637b29a659f5e4934d2ccf79;hpb=899a60d3afa61793c959ddaf34b3298f10c1faa9;p=supertux.git diff --git a/src/supertux/main.cpp b/src/supertux/main.cpp index 6bab73244..0913daeb9 100644 --- a/src/supertux/main.cpp +++ b/src/supertux/main.cpp @@ -14,12 +14,16 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +#include "supertux/main.hpp" + #include #include #include #include #include +#include +#include #ifdef MACOSX namespace supertux_apple { @@ -29,7 +33,6 @@ namespace supertux_apple { #include "addon/addon_manager.hpp" #include "audio/sound_manager.hpp" -#include "binreloc/binreloc.h" #include "control/joystickkeyboardcontroller.hpp" #include "math/random_generator.hpp" #include "physfs/ifile_stream.hpp" @@ -38,7 +41,7 @@ namespace supertux_apple { #include "scripting/squirrel_util.hpp" #include "supertux/gameconfig.hpp" #include "supertux/globals.hpp" -#include "supertux/mainloop.hpp" +#include "supertux/screen_manager.hpp" #include "supertux/resources.hpp" #include "supertux/title_screen.hpp" #include "util/file_system.hpp" @@ -48,7 +51,8 @@ namespace supertux_apple { namespace { DrawingContext *context_pointer; } -static void init_config() +void +Main::init_config() { g_config = new Config(); try { @@ -58,18 +62,25 @@ static void init_config() } } -static void init_tinygettext() +void +Main::init_tinygettext() { - dictionary_manager.add_directory("locale"); - dictionary_manager.set_charset("UTF-8"); + dictionary_manager = new tinygettext::DictionaryManager(); + tinygettext::Log::set_log_info_callback(0); + dictionary_manager->set_filesystem(std::auto_ptr(new PhysFSFileSystem)); + + dictionary_manager->add_directory("locale"); + dictionary_manager->set_charset("UTF-8"); // Config setting "locale" overrides language detection - if (g_config->locale != "") { - dictionary_manager.set_language(tinygettext::Language::from_name(g_config->locale)); + if (g_config->locale != "") + { + dictionary_manager->set_language(tinygettext::Language::from_name(g_config->locale)); } } -static void init_physfs(const char* argv0) +void +Main::init_physfs(const char* argv0) { if(!PHYSFS_init(argv0)) { std::stringstream msg; @@ -191,35 +202,37 @@ static void init_physfs(const char* argv0) PHYSFS_freeList(searchpath); } -static void print_usage(const char* argv0) +void +Main::print_usage(const char* argv0) { - fprintf(stderr, _("Usage: %s [OPTIONS] [LEVELFILE]\n\n"), argv0); - fprintf(stderr, - _("Options:\n" - " -f, --fullscreen Run in fullscreen mode\n" - " -w, --window Run in window mode\n" - " -g, --geometry WIDTHxHEIGHT Run SuperTux in given resolution\n" - " -a, --aspect WIDTH:HEIGHT Run SuperTux with given aspect ratio\n" - " -d, --default Reset video settings to default values\n" - " --renderer RENDERER Use sdl, opengl, or auto to render\n" - " --disable-sfx Disable sound effects\n" - " --disable-music Disable music\n" - " -h, --help Show this help message and quit\n" - " -v, --version Show SuperTux version and quit\n" - " --console Enable ingame scripting console\n" - " --noconsole Disable ingame scripting console\n" - " --show-fps Display framerate in levels\n" - " --no-show-fps Do not display framerate in levels\n" - " --record-demo FILE LEVEL Record a demo to FILE\n" - " --play-demo FILE LEVEL Play a recorded demo\n" - " -s, --debug-scripts Enable script debugger.\n" - "%s\n"), ""); + std::cerr << _("Usage: ") << argv0 << _(" [OPTIONS] [LEVELFILE]\n\n") + << _("Options:\n" + " -f, --fullscreen Run in fullscreen mode\n" + " -w, --window Run in window mode\n" + " -g, --geometry WIDTHxHEIGHT Run SuperTux in given resolution\n" + " -a, --aspect WIDTH:HEIGHT Run SuperTux with given aspect ratio\n" + " -d, --default Reset video settings to default values\n" + " --renderer RENDERER Use sdl, opengl, or auto to render\n" + " --disable-sfx Disable sound effects\n" + " --disable-music Disable music\n" + " -h, --help Show this help message and quit\n" + " -v, --version Show SuperTux version and quit\n" + " --console Enable ingame scripting console\n" + " --noconsole Disable ingame scripting console\n" + " --show-fps Display framerate in levels\n" + " --no-show-fps Do not display framerate in levels\n" + " --record-demo FILE LEVEL Record a demo to FILE\n" + " --play-demo FILE LEVEL Play a recorded demo\n" + " -s, --debug-scripts Enable script debugger.\n" + "\n") + << std::flush; } /** * Options that should be evaluated prior to any initializations at all go here */ -static bool pre_parse_commandline(int argc, char** argv) +bool +Main::pre_parse_commandline(int argc, char** argv) { for(int i = 1; i < argc; ++i) { std::string arg = argv[i]; @@ -240,7 +253,8 @@ static bool pre_parse_commandline(int argc, char** argv) /** * Options that should be evaluated after config is read go here */ -static bool parse_commandline(int argc, char** argv) +bool +Main::parse_commandline(int argc, char** argv) { for(int i = 1; i < argc; ++i) { std::string arg = argv[i]; @@ -250,14 +264,9 @@ static bool parse_commandline(int argc, char** argv) } else if(arg == "--default" || arg == "-d") { g_config->use_fullscreen = false; - g_config->window_width = 800; - g_config->window_height = 600; - - g_config->fullscreen_width = 800; - g_config->fullscreen_height = 600; - - g_config->aspect_width = 0; // auto detect - g_config->aspect_height = 0; + g_config->window_size = Size(800, 600); + g_config->fullscreen_size = Size(800, 600); + g_config->aspect_size = Size(0, 0); // auto detect } else if(arg == "--window" || arg == "-w") { g_config->use_fullscreen = false; @@ -278,11 +287,8 @@ static bool parse_commandline(int argc, char** argv) } else { - g_config->window_width = width; - g_config->window_height = height; - - g_config->fullscreen_width = width; - g_config->fullscreen_height = height; + g_config->window_size = Size(width, height); + g_config->fullscreen_size = Size(width, height); } } } else if(arg == "--aspect" || arg == "-a") { @@ -308,16 +314,15 @@ static bool parse_commandline(int argc, char** argv) } else { - float aspect_ratio = static_cast(g_config->aspect_width) / - static_cast(g_config->aspect_height); + float aspect_ratio = static_cast(aspect_width) / static_cast(aspect_height); // use aspect ratio to calculate logical resolution if (aspect_ratio > 1) { - g_config->aspect_width = static_cast (600 * aspect_ratio + 0.5); - g_config->aspect_height = 600; + g_config->aspect_size = Size(static_cast(600 * aspect_ratio + 0.5), + 600); } else { - g_config->aspect_width = 600; - g_config->aspect_height = static_cast (600 * 1/aspect_ratio + 0.5); + g_config->aspect_size = Size(600, + static_cast(600 * 1/aspect_ratio + 0.5)); } } } @@ -369,7 +374,8 @@ static bool parse_commandline(int argc, char** argv) return false; } -static void init_sdl() +void +Main::init_sdl() { if(SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { std::stringstream msg; @@ -389,7 +395,8 @@ static void init_sdl() ; } -static void init_rand() +void +Main::init_rand() { g_config->random_seed = systemRandom.srand(g_config->random_seed); @@ -397,7 +404,8 @@ static void init_rand() //log_info << "Using random seed " << config->random_seed << how << std::endl; } -void init_video() +void +Main::init_video() { // FIXME: Add something here SCREEN_WIDTH = 800; @@ -425,7 +433,7 @@ void init_video() SDL_WM_SetIcon(icon, 0); SDL_FreeSurface(icon); } -#ifdef DEBUG +#ifndef NDEBUG else { log_warning << "Couldn't load icon '" << icon_fname << "'" << std::endl; } @@ -434,12 +442,13 @@ void init_video() SDL_ShowCursor(0); log_info << (g_config->use_fullscreen?"fullscreen ":"window ") - << " Window: " << g_config->window_width << "x" << g_config->window_height - << " Fullscreen: " << g_config->fullscreen_width << "x" << g_config->fullscreen_height - << " Area: " << g_config->aspect_width << "x" << g_config->aspect_height << std::endl; + << " Window: " << g_config->window_size + << " Fullscreen: " << g_config->fullscreen_size + << " Area: " << g_config->aspect_size << std::endl; } -static void init_audio() +void +Main::init_audio() { sound_manager = new SoundManager(); @@ -447,7 +456,8 @@ static void init_audio() sound_manager->enable_music(g_config->music_enabled); } -static void quit_audio() +void +Main::quit_audio() { if(sound_manager != NULL) { delete sound_manager; @@ -455,7 +465,8 @@ static void quit_audio() } } -void wait_for_event(float min_delay, float max_delay) +void +Main::wait_for_event(float min_delay, float max_delay) { assert(min_delay <= max_delay); @@ -480,7 +491,7 @@ void wait_for_event(float min_delay, float max_delay) while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: - g_main_loop->quit(); + g_screen_manager->quit(); break; case SDL_KEYDOWN: case SDL_JOYBUTTONDOWN: @@ -495,7 +506,7 @@ void wait_for_event(float min_delay, float max_delay) } } -#ifdef DEBUG +#ifndef NDEBUG static Uint32 last_timelog_ticks = 0; static const char* last_timelog_component = 0; @@ -516,17 +527,8 @@ static inline void timelog(const char* ) } #endif -std::istream* physfs_open_file(const char* name) -{ - return new IFileStream(name); -} - -void physfs_free_list(char** name) -{ - PHYSFS_freeList(name); -} - -int supertux_main(int argc, char** argv) +int +Main::main(int argc, char** argv) { int result = 0; @@ -537,7 +539,6 @@ int supertux_main(int argc, char** argv) Console::instance = new Console(); init_physfs(argv[0]); - dictionary_manager.set_filesystem(std::auto_ptr(new PhysFSFileSystem)); init_sdl(); timelog("controller"); @@ -570,11 +571,11 @@ int supertux_main(int argc, char** argv) Scripting::init_squirrel(g_config->enable_script_debugger); timelog("resources"); - load_shared(); + Resources::load_shared(); timelog(0); - g_main_loop = new MainLoop(); + g_screen_manager = new ScreenManager(); if(g_config->start_level != "") { // we have a normal path specified at commandline, not a physfs path. // So we simply mount that path here... @@ -585,7 +586,7 @@ int supertux_main(int argc, char** argv) if(g_config->start_level.size() > 4 && g_config->start_level.compare(g_config->start_level.size() - 5, 5, ".stwm") == 0) { init_rand(); - g_main_loop->push_screen(new WorldMapNS::WorldMap( + g_screen_manager->push_screen(new WorldMapNS::WorldMap( FileSystem::basename(g_config->start_level))); } else { init_rand();//If level uses random eg. for @@ -601,15 +602,15 @@ int supertux_main(int argc, char** argv) if(g_config->record_demo != "") session->record_demo(g_config->record_demo); - g_main_loop->push_screen(session.release()); + g_screen_manager->push_screen(session.release()); } } else { init_rand(); - g_main_loop->push_screen(new TitleScreen()); + g_screen_manager->push_screen(new TitleScreen()); } //init_rand(); PAK: this call might subsume the above 3, but I'm chicken! - g_main_loop->run(context); + g_screen_manager->run(context); } catch(std::exception& e) { log_fatal << "Unexpected exception: " << e.what() << std::endl; result = 1; @@ -618,10 +619,10 @@ int supertux_main(int argc, char** argv) result = 1; } - delete g_main_loop; - g_main_loop = NULL; + delete g_screen_manager; + g_screen_manager = NULL; - unload_shared(); + Resources::unload_shared(); quit_audio(); if(g_config)