static bool select_autopickup_items( std::vector<std::list<item_idx>> &here, std::vector<pickup_count> &getitem ) { bool bFoundSomething = false; //Loop through Items lowest Volume first bool bPickup = false; for( size_t iVol = 0, iNumChecked = 0; iNumChecked < here.size(); iVol++ ) { for( size_t i = 0; i < here.size(); i++ ) { bPickup = false; std::list<item_idx>::iterator begin_iterator = here[i].begin(); if( begin_iterator->_item.volume() / units::legacy_volume_factor == static_cast<int>( iVol ) ) { iNumChecked++; const std::string sItemName = begin_iterator->_item.tname( 1, false ); //Check the Pickup Rules if( get_auto_pickup().check_item( sItemName ) == RULE_WHITELISTED ) { bPickup = true; } else if( get_auto_pickup().check_item( sItemName ) != RULE_BLACKLISTED ) { //No prematched pickup rule found //check rules in more detail get_auto_pickup().create_rule( &begin_iterator->_item ); if( get_auto_pickup().check_item( sItemName ) == RULE_WHITELISTED ) { bPickup = true; } } //Auto Pickup all items with Volume <= AUTO_PICKUP_VOL_LIMIT * 50 and Weight <= AUTO_PICKUP_ZERO * 50 //items will either be in the autopickup list ("true") or unmatched ("") if( !bPickup ) { int weight_limit = get_option<int>( "AUTO_PICKUP_WEIGHT_LIMIT" ); int volume_limit = get_option<int>( "AUTO_PICKUP_VOL_LIMIT" ); if( weight_limit && volume_limit ) { if( begin_iterator->_item.volume() <= units::from_milliliter( volume_limit * 50 ) && begin_iterator->_item.weight() <= weight_limit * 50_gram && get_auto_pickup().check_item( sItemName ) != RULE_BLACKLISTED ) { bPickup = true; } } } } if( bPickup ) { getitem[i].pick = true; bFoundSomething = true; } } } return bFoundSomething; }
static bool select_autopickup_items( std::vector<item> &here, std::vector<pickup_count> &getitem ) { bool bFoundSomething = false; //Loop through Items lowest Volume first bool bPickup = false; for( size_t iVol = 0, iNumChecked = 0; iNumChecked < here.size(); iVol++ ) { for( size_t i = 0; i < here.size(); i++ ) { bPickup = false; if( here[i].volume() == ( int )iVol ) { iNumChecked++; const std::string sItemName = here[i].tname( 1, false ); //Check the Pickup Rules if( get_auto_pickup().check_item( sItemName ) == "true" ) { bPickup = true; } else if( get_auto_pickup().check_item( sItemName ) != "false" ) { //No prematched pickup rule found //items with damage, (fits) or a container get_auto_pickup().create_rules( sItemName ); if( get_auto_pickup().check_item( sItemName ) == "true" ) { bPickup = true; } } //Auto Pickup all items with 0 Volume and Weight <= AUTO_PICKUP_ZERO * 50 //items will either be in the autopickup list ("true") or unmatched ("") if( !bPickup && OPTIONS["AUTO_PICKUP_ZERO"] ) { if( here[i].volume() == 0 && here[i].weight() <= OPTIONS["AUTO_PICKUP_ZERO"] * 50 && get_auto_pickup().check_item( sItemName ) != "false" ) { bPickup = true; } } } if( bPickup ) { getitem[i].pick = bPickup; bFoundSomething = true; } } } return bFoundSomething; }
bool main_menu::opening_screen() { // Play title music, whoo! play_music( "title" ); world_generator->set_active_world( NULL ); world_generator->init(); init_windows(); init_strings(); print_menu( w_open, 0, iMenuOffsetX, iMenuOffsetY ); if( !assure_dir_exist( FILENAMES["config_dir"] ) ) { popup( _( "Unable to make config directory. Check permissions." ) ); return false; } if( !assure_dir_exist( FILENAMES["savedir"] ) ) { popup( _( "Unable to make save directory. Check permissions." ) ); return false; } if( !assure_dir_exist( FILENAMES["templatedir"] ) ) { popup( _( "Unable to make templates directory. Check permissions." ) ); return false; } for( std::string path : get_files_from_path( ".template", FILENAMES["templatedir"], false, true ) ) { path = native_to_utf8( path ); path.erase( path.find( ".template" ), std::string::npos ); path.erase( 0, path.find_last_of( "\\//" ) + 1 ); templates.push_back( path ); } std::sort( templates.begin(), templates.end(), std::greater<std::string>() ); ctxt.register_cardinal(); ctxt.register_action( "QUIT" ); ctxt.register_action( "CONFIRM" ); ctxt.register_action( "DELETE_TEMPLATE" ); // for the menu shortcuts ctxt.register_action( "ANY_INPUT" ); bool start = false; g->u = player(); // Make [Load Game] the default cursor position if there's game save available if( !world_generator->all_worldnames().empty() ) { sel1 = 2; } while( !start ) { print_menu( w_open, sel1, iMenuOffsetX, iMenuOffsetY, ( sel1 != 0 ) ); if( layer == 1 ) { if( sel1 == 0 ) { // Print the MOTD. const int motdy = ( iMenuOffsetY - mmenu_motd.size() ) * 2 / 3; const int motdx = 8 + extra_w / 2; for( size_t i = 0; i < mmenu_motd.size(); i++ ) { mvwprintz( w_open, motdy + i, motdx, c_light_red, mmenu_motd[i].c_str() ); } wrefresh( w_open ); catacurses::refresh(); } std::string action = handle_input_timeout( ctxt ); std::string sInput = ctxt.get_raw_input().text; // check automatic menu shortcuts for( size_t i = 0; i < vMenuHotkeys.size(); ++i ) { for( auto hotkey : vMenuHotkeys[i] ) { if( sInput == hotkey ) { sel1 = i; action = "CONFIRM"; } } } // also check special keys if( action == "QUIT" ) { if( query_yn( _( "Really quit?" ) ) ) { sel1 = 8; action = "CONFIRM"; } } else if( action == "LEFT" ) { if( sel1 > 0 ) { sel1--; } else { sel1 = 8; } on_move(); } else if( action == "RIGHT" ) { if( sel1 < 8 ) { sel1++; } else { sel1 = 0; } on_move(); } if( ( action == "UP" || action == "CONFIRM" ) && sel1 > 0 ) { if( sel1 == 6 ) { display_help(); } else if( sel1 == 7 ) { display_credits(); } else if( sel1 == 8 ) { return false; } else { sel2 = 0; layer = 2; print_menu( w_open, sel1, iMenuOffsetX, iMenuOffsetY, ( sel1 != 0 ) ); switch( sel1 ) { case 1: start = new_character_tab(); break; case 2: start = load_character_tab(); break; case 3: world_tab(); break; default: break; } } } } else if( layer == 2 ) { if( sel1 == 4 ) { // Special game if( MAP_SHARING::isSharing() ) { // Thee can't save special games, therefore thee can't share them layer = 1; popup( _( "Special games don't work with shared maps." ) ); continue; } std::vector<std::string> special_names; int xoffset = 32 + iMenuOffsetX + extra_w / 2; int yoffset = iMenuOffsetY - 2; int xlen = 0; for( int i = 1; i < NUM_SPECIAL_GAMES; i++ ) { std::string spec_name = special_game_name( special_game_id( i ) ); special_names.push_back( spec_name ); xlen += spec_name.size() + 2; } xlen += special_names.size() - 1; print_menu_items( w_open, special_names, sel2, yoffset, xoffset - ( xlen / 4 ) ); wrefresh( w_open ); catacurses::refresh(); std::string action = handle_input_timeout( ctxt ); if( action == "LEFT" ) { if( sel2 > 0 ) { sel2--; } else { sel2 = NUM_SPECIAL_GAMES - 2; } on_move(); } else if( action == "RIGHT" ) { if( sel2 < NUM_SPECIAL_GAMES - 2 ) { sel2++; } else { sel2 = 0; } on_move(); } else if( action == "DOWN" || action == "QUIT" ) { layer = 1; } if( action == "UP" || action == "CONFIRM" ) { if( sel2 >= 0 && sel2 < NUM_SPECIAL_GAMES - 1 ) { g->gamemode = get_special_game( special_game_id( sel2 + 1 ) ); // check world WORLDPTR world = world_generator->make_new_world( special_game_id( sel2 + 1 ) ); if( world == NULL ) { continue; } world_generator->set_active_world( world ); try { g->setup(); } catch( const std::exception &err ) { debugmsg( "Error: %s", err.what() ); g->gamemode.reset(); g->u = player(); continue; } if( !g->gamemode->init() ) { g->gamemode.reset(); g->u = player(); continue; } start = true; } } } else if( sel1 == 5 ) { // Settings Menu int settings_subs_to_display = vSettingsSubItems.size(); std::vector<std::string> settings_subs; int xoffset = 46 + iMenuOffsetX + extra_w / 2; int yoffset = iMenuOffsetY - 2; int xlen = 0; for( int i = 0; i < settings_subs_to_display; ++i ) { settings_subs.push_back( vSettingsSubItems[i] ); xlen += vSettingsSubItems[i].size() + 2; // Open and close brackets added } xlen += settings_subs.size() - 1; if( settings_subs.size() > 1 ) { xoffset -= 6; } print_menu_items( w_open, settings_subs, sel2, yoffset, xoffset - ( xlen / 4 ) ); wrefresh( w_open ); catacurses::refresh(); std::string action = handle_input_timeout( ctxt ); std::string sInput = ctxt.get_raw_input().text; for( int i = 0; i < settings_subs_to_display; ++i ) { for( auto hotkey : vSettingsHotkeys[i] ) { if( sInput == hotkey ) { sel2 = i; action = "CONFIRM"; } } } if( action == "LEFT" ) { if( sel2 > 0 ) { --sel2; } else { sel2 = settings_subs_to_display - 1; } on_move(); } else if( action == "RIGHT" ) { if( sel2 < settings_subs_to_display - 1 ) { ++sel2; } else { sel2 = 0; } on_move(); } else if( action == "DOWN" || action == "QUIT" ) { layer = 1; } if( action == "UP" || action == "CONFIRM" ) { if( sel2 == 0 ) { get_options().show( true ); // The language may have changed- gracefully handle this. init_strings(); print_menu( w_open, sel1, iMenuOffsetX, iMenuOffsetY, ( sel1 != 0 ) ); } else if( sel2 == 1 ) { input_context ctxt_default = get_default_mode_input_context(); ctxt_default.display_menu(); } else if( sel2 == 2 ) { get_auto_pickup().show(); } else if( sel2 == 3 ) { get_safemode().show(); } else if( sel2 == 4 ) { all_colors.show_gui(); } } } } } if( start ) { g->refresh_all(); g->draw(); } return start; }