int Main::run(int argc, char** argv) { int result = 0; try { CommandLineArguments args; try { args.parse_args(argc, argv); g_log_level = args.get_log_level(); } catch(const std::exception& err) { std::cout << "Error: " << err.what() << std::endl; return EXIT_FAILURE; } PhysfsSubsystem physfs_subsystem(argv[0], args.datadir, args.userdir); physfs_subsystem.print_search_path(); timelog("config"); ConfigSubsystem config_subsystem; args.merge_into(*g_config); timelog("tinygettext"); init_tinygettext(); switch (args.get_action()) { case CommandLineArguments::PRINT_VERSION: args.print_version(); return 0; case CommandLineArguments::PRINT_HELP: args.print_help(argv[0]); return 0; case CommandLineArguments::PRINT_DATADIR: args.print_datadir(); return 0; default: launch_game(); break; } } catch(const std::exception& e) { log_fatal << "Unexpected exception: " << e.what() << std::endl; result = 1; } catch(...) { log_fatal << "Unexpected exception" << std::endl; result = 1; } g_dictionary_manager.reset(); return result; }
int main(int argc, char** argv) { int result = 0; try { Console::instance = new Console(); // srand(time(0)); // this breaks repeatability in random numbers init_physfs(argv[0]); init_sdl(); timelog("controller"); main_controller = new JoystickKeyboardController(); timelog("config"); init_config(); timelog("tinygettext"); init_tinygettext(); timelog("commandline"); if(parse_commandline(argc, argv)) return 0; timelog("audio"); init_audio(); timelog("video"); init_video(); Console::instance->init_graphics(); timelog("scripting"); Scripting::init_squirrel(config->enable_script_debugger); timelog("resources"); load_shared(); timelog(0); main_loop = new MainLoop(); if(config->start_level != "") { // we have a normal path specified at commandline not physfs paths. // So we simply mount that path here... std::string dir = FileSystem::dirname(config->start_level); PHYSFS_addToSearchPath(dir.c_str(), true); init_rand(); // play_demo sets seed, record_demo uses it if(config->start_level.size() > 4 && config->start_level.compare(config->start_level.size() - 5, 5, ".stwm") == 0) { main_loop->push_screen(new WorldMapNS::WorldMap( FileSystem::basename(config->start_level))); } else { std::auto_ptr<GameSession> session ( new GameSession(FileSystem::basename(config->start_level))); if(config->start_demo != "") session->play_demo(config->start_demo); if(config->record_demo != "") session->record_demo(config->record_demo); main_loop->push_screen(session.release()); } } else { init_rand(); main_loop->push_screen(new TitleScreen()); } main_loop->run(); } catch(std::exception& e) { log_fatal << "Unexpected exception: " << e.what() << std::endl; result = 1; } catch(...) { log_fatal << "Unexpected exception" << std::endl; result = 1; } delete main_loop; main_loop = NULL; free_options_menu(); unload_shared(); quit_audio(); if(config) config->save(); delete config; config = NULL; delete main_controller; main_controller = NULL; delete Console::instance; Console::instance = NULL; Scripting::exit_squirrel(); delete texture_manager; texture_manager = NULL; SDL_Quit(); PHYSFS_deinit(); return result; }
int Main::run(int argc, char** argv) { #ifdef WIN32 //SDL is used instead of PHYSFS because both create the same path in app data //However, PHYSFS is not yet initizlized, and this should be run before anything is initialized std::string prefpath = SDL_GetPrefPath("SuperTux", "supertux2"); std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; //All this conversion stuff is necessary to make this work for internationalized usernames std::string outpath = prefpath + u8"/console.out"; std::wstring w_outpath = converter.from_bytes(outpath); _wfreopen(w_outpath.c_str(), L"a", stdout); std::string errpath = prefpath + u8"/console.err"; std::wstring w_errpath = converter.from_bytes(errpath); _wfreopen(w_errpath.c_str(), L"a", stderr); #endif // Create and install global locale std::locale::global(boost::locale::generator().generate("")); // Make boost.filesystem use it boost::filesystem::path::imbue(std::locale()); int result = 0; try { CommandLineArguments args; try { args.parse_args(argc, argv); g_log_level = args.get_log_level(); } catch(const std::exception& err) { std::cout << "Error: " << err.what() << std::endl; return EXIT_FAILURE; } PhysfsSubsystem physfs_subsystem(argv[0], args.datadir, args.userdir); physfs_subsystem.print_search_path(); timelog("config"); ConfigSubsystem config_subsystem; args.merge_into(*g_config); timelog("tinygettext"); init_tinygettext(); switch (args.get_action()) { case CommandLineArguments::PRINT_VERSION: args.print_version(); return 0; case CommandLineArguments::PRINT_HELP: args.print_help(argv[0]); return 0; case CommandLineArguments::PRINT_DATADIR: args.print_datadir(); return 0; default: launch_game(); break; } } catch(const std::exception& e) { log_fatal << "Unexpected exception: " << e.what() << std::endl; result = 1; } catch(...) { log_fatal << "Unexpected exception" << std::endl; result = 1; } g_dictionary_manager.reset(); return result; }
int Main::run(int argc, char** argv) { #ifdef WIN32 //SDL is used instead of PHYSFS because both create the same path in app data //However, PHYSFS is not yet initizlized, and this should be run before anything is initialized std::string prefpath = SDL_GetPrefPath("SuperTux", "supertux2"); freopen((prefpath + "/console.out").c_str(), "a", stdout); freopen((prefpath + "/console.err").c_str(), "a", stderr); #endif int result = 0; try { CommandLineArguments args; try { args.parse_args(argc, argv); g_log_level = args.get_log_level(); } catch(const std::exception& err) { std::cout << "Error: " << err.what() << std::endl; return EXIT_FAILURE; } PhysfsSubsystem physfs_subsystem(argv[0], args.datadir, args.userdir); physfs_subsystem.print_search_path(); timelog("config"); ConfigSubsystem config_subsystem; args.merge_into(*g_config); timelog("tinygettext"); init_tinygettext(); switch (args.get_action()) { case CommandLineArguments::PRINT_VERSION: args.print_version(); return 0; case CommandLineArguments::PRINT_HELP: args.print_help(argv[0]); return 0; case CommandLineArguments::PRINT_DATADIR: args.print_datadir(); return 0; default: launch_game(); break; } } catch(const std::exception& e) { log_fatal << "Unexpected exception: " << e.what() << std::endl; result = 1; } catch(...) { log_fatal << "Unexpected exception" << std::endl; result = 1; } g_dictionary_manager.reset(); return result; }