X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fmain.cpp;h=84b0e968806fa8d6316759ca5e006150151d285c;hb=1bfcf5a82ac306fa5380c4db2be5109b61fac58e;hp=d31b9f68265eba8f2d9e1d20f7adcac52abb11e3;hpb=38a234d951bfe3fe346bb967ce8d16c998aa2f45;p=supertux.git diff --git a/src/main.cpp b/src/main.cpp index d31b9f682..84b0e9688 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -20,7 +20,7 @@ #include #include -#include "main.h" +#include "main.hpp" #include #include @@ -38,17 +38,17 @@ #include #include -#include "gameconfig.h" -#include "resources.h" -#include "gettext.h" -#include "audio/sound_manager.h" -#include "video/surface.h" -#include "control/joystickkeyboardcontroller.h" -#include "misc.h" -#include "title.h" -#include "game_session.h" -#include "file_system.h" -#include "physfs/physfs_sdl.h" +#include "gameconfig.hpp" +#include "resources.hpp" +#include "gettext.hpp" +#include "audio/sound_manager.hpp" +#include "video/surface.hpp" +#include "control/joystickkeyboardcontroller.hpp" +#include "misc.hpp" +#include "title.hpp" +#include "game_session.hpp" +#include "file_system.hpp" +#include "physfs/physfs_sdl.hpp" SDL_Surface* screen = 0; JoystickKeyboardController* main_controller = 0; @@ -140,29 +140,34 @@ static void init_physfs(const char* argv0) dir += "/data"; std::string testfname = dir; testfname += "/credits.txt"; + bool sourcedir = false; FILE* f = fopen(testfname.c_str(), "r"); if(f) { fclose(f); if(!PHYSFS_addToSearchPath(dir.c_str(), 1)) { std::cout << "Warning: Couldn't add '" << dir << "' to physfs searchpath: " << PHYSFS_getLastError() << "\n"; + } else { + sourcedir = true; } } + if(!sourcedir) { #if defined(APPDATADIR) || defined(ENABLE_BINRELOC) - std::string datadir; + std::string datadir; #ifdef ENABLE_BINRELOC - char* brdatadir = br_strcat(DATADIR, "/" PACKAGE_NAME); - datadir = brdatadir; - free(brdatadir); + char* brdatadir = br_strcat(DATADIR, "/" PACKAGE_NAME); + datadir = brdatadir; + free(brdatadir); #else - datadir = APPDATADIR; + datadir = APPDATADIR; #endif - if(!PHYSFS_addToSearchPath(datadir.c_str(), 1)) { - std::cout << "Couldn't add '" << datadir - << "' to physfs searchpath: " << PHYSFS_getLastError() << "\n"; - } + if(!PHYSFS_addToSearchPath(datadir.c_str(), 1)) { + std::cout << "Couldn't add '" << datadir + << "' to physfs searchpath: " << PHYSFS_getLastError() << "\n"; + } #endif + } // allow symbolic links PHYSFS_permitSymbolicLinks(1); @@ -177,11 +182,14 @@ static void 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 give resolution\n" + " -f, --fullscreen Run in fullscreen mode\n" + " -w, --window Run in window mode\n" + " -g, --geometry WIDTHxHEIGHT Run SuperTux in given resolution\n" " --help Show this help message\n" " --version Display SuperTux version and quit\n" + " --show-fps Display framerate in levels\n" + " --record-demo FILE LEVEL Record a demo to FILE\n" + " --play-demo FILE LEVEL Play a recorded demo\n" "\n")); } @@ -350,32 +358,13 @@ static void init_audio() { sound_manager = new SoundManager(); - int format = MIX_DEFAULT_FORMAT; - if(Mix_OpenAudio(config->audio_frequency, format, config->audio_channels, - config->audio_chunksize) < 0) { - std::cerr << "Couldn't initialize audio (" - << config->audio_frequency << "HZ, " << config->audio_channels - << " Channels, Format " << format << ", ChunkSize " - << config->audio_chunksize << "): " << SDL_GetError() << "\n"; - return; - } - sound_manager->set_audio_device_available(true); sound_manager->enable_sound(config->sound_enabled); sound_manager->enable_music(config->music_enabled); - - if(Mix_AllocateChannels(config->audio_voices) < 0) { - std::cerr << "Couldn't allocate '" << config->audio_voices << "' audio voices: " - << SDL_GetError() << "\n"; - return; - } } static void quit_audio() { if(sound_manager) { - if(sound_manager->audio_device_available()) - Mix_CloseAudio(); - delete sound_manager; sound_manager = 0; } @@ -388,7 +377,11 @@ void wait_for_event(float min_delay, float max_delay) Uint32 min = (Uint32) (min_delay * 1000); Uint32 max = (Uint32) (max_delay * 1000); - SDL_Delay(min); + Uint32 ticks = SDL_GetTicks(); + while(SDL_GetTicks() - ticks < min) { + SDL_Delay(10); + sound_manager->update(); + } // clear even queue SDL_Event event; @@ -397,7 +390,7 @@ void wait_for_event(float min_delay, float max_delay) /* Handle events: */ bool running = false; - Uint32 ticks = SDL_GetTicks(); + ticks = SDL_GetTicks(); while(running) { while(SDL_PollEvent(&event)) { switch(event.type) { @@ -411,6 +404,7 @@ void wait_for_event(float min_delay, float max_delay) } if(SDL_GetTicks() - ticks >= (max - min)) running = false; + sound_manager->update(); SDL_Delay(10); } }