void PingusMain::parse_args(int argc, char** argv) { CommandLine argp; argp.add_usage(_("[OPTIONS]... [FILE]")); argp.add_doc(_("Pingus is a puzzle game where you need to guide a bunch of little penguins around the world.")); argp.add_group(_("General Options:")); argp.add_option('h', "help", "", _("Displays this help")); argp.add_option('V', "version", "", _("Print version number and exit")); argp.add_option('v', "verbose", "", _("Enable info level log output")); argp.add_option('D', "debug", "", _("Enable debug level log output")); argp.add_option('Q', "quiet", "", _("Disable all log output")); argp.add_group(_("Display Options:")); argp.add_option('w', "window", "", _("Start in Window Mode")); argp.add_option('f', "fullscreen", "", _("Start in Fullscreen")); argp.add_option('r', "renderer", "RENDERER", _("Use the given renderer (default: sdl)")); argp.add_option('g', "geometry", "{width}x{height}", _("Set the window resolution for pingus (default: 800x600)")); argp.add_option('R', "fullscreen-resolution", "{width}x{height}", _("Set the resolution used in fullscreen mode (default: 800x600)")); argp.add_option(346, "software-cursor", "", _("Enable software cursor")); argp.add_group(_("Game Options:")); argp.add_option(337, "no-auto-scrolling", "", _("Disable automatic scrolling")); argp.add_option(338, "drag-drop-scrolling", "", _("Enable drag'n drop scrolling")); argp.add_group(_("Sound Options:")); argp.add_option('s', "disable-sound", "", _("Disable sound")); argp.add_option('m', "disable-music", "", _("Disable music")); argp.add_group("Language Options:"); argp.add_option('l', "language", "LANG", _("Select language to use with Pingus")); argp.add_option(365, "list-languages", "", _("List all available languages")); argp.add_group("Editor Options:"); argp.add_option('e', "editor", "", _("Loads the level editor")); argp.add_group(_("Directory Options:")); argp.add_option('d', "datadir", _("DIR"), _("Load game datafiles from DIR")); argp.add_option('u', "userdir", _("DIR"), _("Load config files and store savegames in DIR")); argp.add_option('a', "addon", _("DIR"), _("Load game modifications from DIR")); argp.add_option(342, "no-cfg-file", "", _("Don't read ~/.pingus/config")); argp.add_option('c', "config", _("FILE"), _("Read config options from FILE")); argp.add_option(360, "controller", "FILE", _("Uses the controller given in FILE")); argp.add_group(_("Debug Options:")); argp.add_option(334, "developer-mode", "", _("Enables some special features for developers")); argp.add_option('t', "speed", "SPEED", _("Set the game speed (0=fastest, >0=slower)")); argp.add_option('k', "fps", "FPS", _("Set the desired game framerate (frames per second)")); argp.add_option(344, "tile-size", "INT", _("Set the size of the map tiles (default: 32)")); argp.parse_args(argc, argv); argp.set_help_indent(20); while (argp.next()) { switch (argp.get_key()) { case 'r': // --renderer if (argp.get_argument() == "help") { std::cout << "Available renderers: " << std::endl; std::cout << " delta: Software rendering with dirty-rectangles" << std::endl; std::cout << " sdl: Software rendering" << std::endl; std::cout << " opengl: Hardware accelerated graphics" << std::endl; std::cout << " null: No rendering at all, for debugging" << std::endl; exit(EXIT_SUCCESS); } else { cmd_options.framebuffer_type.set(framebuffer_type_from_string(argp.get_argument())); //FIXME: //std::cout << "Unknown renderer: " << argp.get_argument() //<< " use '--renderer help' to get a list of available renderer" << std::endl; //exit(EXIT_FAILURE); } break; case 'e': // -e, --editor cmd_options.editor.set(true); break; case 't': // -t, --set-speed cmd_options.speed.set(StringUtil::to<int>(argp.get_argument())); break; case 'k': // -k, --set-fps cmd_options.desiredfps.set(StringUtil::to<float>(argp.get_argument())); break; case 's': // -s, --disable-sound cmd_options.disable_sound.set(true); break; case 'm': // -m, --disable-music cmd_options.disable_music.set(true); break; case 'g': { Size size; if (sscanf(argp.get_argument().c_str(), "%dx%d", &size.width, &size.height) != 2) { std::cout << "Resolution std::string is wrong, it should be like: \n" << "\"640x480\" or \"800x600\"" << std::endl; exit(EXIT_FAILURE); } cmd_options.geometry.set(size); } break; case 'R': { Size size; if (sscanf(argp.get_argument().c_str(), "%dx%d", &size.width, &size.height) != 2) { std::cout << "Resolution std::string is wrong, it should be like: \n" << "\"640x480\" or \"800x600\"" << std::endl; exit(EXIT_FAILURE); } cmd_options.fullscreen_resolution.set(size); } break; case 'd': // -d, --datadir cmd_options.datadir.set(argp.get_argument()); break; case 'a': // -a, --addon g_path_manager.add_overlay_path(argp.get_argument()); break; case 'u': // -u, --userdir cmd_options.userdir.set(argp.get_argument()); break; case 'V': std::cout << "Pingus 0.7.6\n" "Copyright (C) 1998-2011 Ingo Ruhnke <*****@*****.**>\n" "See the file AUTHORS for a complete list of contributors.\n" "Pingus comes with ABSOLUTELY NO WARRANTY. This is free software, and you are\n" "welcome to redistribute it under certain conditions; see the file COPYING for details." << std::endl; exit(EXIT_SUCCESS); break; case 'f': // --fullscreen cmd_options.fullscreen.set(true); break; case 'w': // --window cmd_options.fullscreen.set(false); break; case 334: // --developer-mode cmd_options.developer_mode.set(true); globals::developer_mode = true; break; case 337: cmd_options.auto_scrolling.set(false); break; case 338: cmd_options.drag_drop_scrolling.set(true); break; case 342: // --no-cfg-file cmd_options.no_config_file.set(true); break; case 344: cmd_options.tile_size.set(StringUtil::to<int>(argp.get_argument())); break; case 346: cmd_options.software_cursor.set(true); break; case 'c': cmd_options.merge(Options::from_file(Pathname(argp.get_argument(), Pathname::SYSTEM_PATH))); break; case 'D': g_logger.set_log_level(Logger::kDebug); break; case 'v': g_logger.set_log_level(Logger::kInfo); break; case 'Q': g_logger.set_log_level(Logger::kNone); break; case 360: cmd_options.controller.set(argp.get_argument()); break; case 'l': // language cmd_options.language.set(argp.get_argument()); break; case 365: // list-languages cmd_options.list_languages.set(true); break; case 'h': argp.print_help(); exit(EXIT_SUCCESS); break; case CommandLine::REST_ARG: if (!cmd_options.rest.is_set()) { cmd_options.rest.set(argp.get_argument()); } else { std::cout << "Wrong argument: '" << argp.get_argument() << "'" << std::endl; std::cout << "You can only give one file argument," << std::endl; exit(EXIT_FAILURE); } break; default: std::cout << "Error: Got " << argp.get_key() << " " << argp.get_argument() << std::endl; break; } } }
void OptionMenu::on_renderer_change(const std::string& str) { config_manager.set_renderer(framebuffer_type_from_string(str)); }