X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fsupertux%2Fmain.cpp;h=048ebab73289bf64b6cab3c761e6eb466ef35576;hb=0289d77aedcb806daaeb5965c34f8d69e8ceed33;hp=46c3e9630efafd57670d6096c07e8a5e2b40dcf5;hpb=b24250d3cf9159c017eeb7c49d22e956aea7dcaa;p=supertux.git diff --git a/src/supertux/main.cpp b/src/supertux/main.cpp index 46c3e9630..048ebab73 100644 --- a/src/supertux/main.cpp +++ b/src/supertux/main.cpp @@ -41,6 +41,7 @@ namespace supertux_apple { #include "scripting/squirrel_util.hpp" #include "supertux/gameconfig.hpp" #include "supertux/globals.hpp" +#include "supertux/player_status.hpp" #include "supertux/screen_manager.hpp" #include "supertux/resources.hpp" #include "supertux/title_screen.hpp" @@ -92,8 +93,8 @@ Main::init_physfs(const char* argv0) PHYSFS_permitSymbolicLinks(1); // Initialize physfs (this is a slightly modified version of - // PHYSFS_setSaneConfig - const char* application = "supertux2"; //instead of PACKAGE_NAME so we can coexist with MS1 + // PHYSFS_setSaneConfig) + const char* application = PACKAGE_NAME; const char* userdir = PHYSFS_getUserDir(); char* writedir = new char[strlen(userdir) + strlen(application) + 2]; @@ -176,23 +177,21 @@ Main::init_physfs(const char* argv0) #endif if(!sourcedir) { -#if defined(APPDATADIR) || defined(ENABLE_BINRELOC) - std::string datadir; + std::string datadir = PHYSFS_getBaseDir(); + datadir = datadir.substr(0, datadir.rfind(INSTALL_SUBDIR_BIN)); + datadir += "/" INSTALL_SUBDIR_SHARE; #ifdef ENABLE_BINRELOC char* dir; br_init (NULL); - dir = br_find_data_dir(APPDATADIR); + dir = br_find_data_dir(datadir.c_str()); datadir = dir; free(dir); -#else - datadir = APPDATADIR; #endif if(!PHYSFS_addToSearchPath(datadir.c_str(), 1)) { log_warning << "Couldn't add '" << datadir << "' to physfs searchpath: " << PHYSFS_getLastError() << std::endl; } -#endif } //show search Path @@ -335,7 +334,7 @@ Main::parse_commandline(int argc, char** argv) } else { - g_config->video = get_video_system(argv[i]); + g_config->video = VideoSystem::get_video_system(argv[i]); } } else if(arg == "--show-fps") { g_config->show_fps = true; @@ -433,11 +432,9 @@ Main::init_video() SDL_WM_SetIcon(icon, 0); SDL_FreeSurface(icon); } -#ifndef NDEBUG else { log_warning << "Couldn't load icon '" << icon_fname << "'" << std::endl; } -#endif SDL_ShowCursor(0); @@ -506,7 +503,6 @@ Main::wait_for_event(float min_delay, float max_delay) } } -#ifndef NDEBUG static Uint32 last_timelog_ticks = 0; static const char* last_timelog_component = 0; @@ -521,11 +517,6 @@ static inline void timelog(const char* component) last_timelog_ticks = current_ticks; last_timelog_component = component; } -#else -static inline void timelog(const char* ) -{ -} -#endif int Main::run(int argc, char** argv) @@ -575,7 +566,12 @@ Main::run(int argc, char** argv) timelog(0); + const std::auto_ptr default_playerstatus(new PlayerStatus()); + g_screen_manager = new ScreenManager(); + + init_rand(); + 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,14 +581,11 @@ Main::run(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_screen_manager->push_screen(new worldmap::WorldMap( - FileSystem::basename(g_config->start_level))); + FileSystem::basename(g_config->start_level), default_playerstatus.get())); } else { - init_rand();//If level uses random eg. for - // rain particles before we do this: std::auto_ptr session ( - new GameSession(FileSystem::basename(g_config->start_level))); + new GameSession(FileSystem::basename(g_config->start_level), default_playerstatus.get())); g_config->random_seed =session->get_demo_random_seed(g_config->start_demo); init_rand();//initialise generator with seed from session @@ -605,11 +598,9 @@ Main::run(int argc, char** argv) g_screen_manager->push_screen(session.release()); } } else { - init_rand(); - g_screen_manager->push_screen(new TitleScreen()); + g_screen_manager->push_screen(new TitleScreen(default_playerstatus.get())); } - //init_rand(); PAK: this call might subsume the above 3, but I'm chicken! g_screen_manager->run(context); } catch(std::exception& e) { log_fatal << "Unexpected exception: " << e.what() << std::endl;