void inventory::assign_empty_invlet(item &it, bool force) { if( !get_option<bool>( "AUTO_INV_ASSIGN" ) ) { return; } player *p = &(g->u); std::set<char> cur_inv = p->allocated_invlets(); itype_id target_type = it.typeId(); for (auto iter : p->assigned_invlet) { if (iter.second == target_type && !cur_inv.count(iter.first)) { it.invlet = iter.first; return; } } if (cur_inv.size() < inv_chars.size()) { for( const auto &inv_char : inv_chars ) { if( p->assigned_invlet.count(inv_char) ) { // don't overwrite assigned keys continue; } if( cur_inv.find( inv_char ) == cur_inv.end() ) { it.invlet = inv_char; return; } } } if (!force) { it.invlet = 0; return; } // No free hotkey exist, re-use some of the existing ones for( auto &elem : items ) { item &o = elem.front(); if (o.invlet != 0) { it.invlet = o.invlet; o.invlet = 0; return; } } debugmsg("could not find a hotkey for %s", it.tname().c_str()); }
void inventory::assign_empty_invlet( item &it, const Character &p, const bool force ) { if( !get_option<bool>( "AUTO_INV_ASSIGN" ) ) { return; } invlets_bitset cur_inv = p.allocated_invlets(); itype_id target_type = it.typeId(); for( auto iter : assigned_invlet ) { if( iter.second == target_type && !cur_inv[iter.first] ) { it.invlet = iter.first; return; } } if( cur_inv.count() < inv_chars.size() ) { for( const auto &inv_char : inv_chars ) { if( assigned_invlet.count( inv_char ) ) { // don't overwrite assigned keys continue; } if( !cur_inv[inv_char] ) { it.invlet = inv_char; return; } } } if( !force ) { it.invlet = 0; return; } // No free hotkey exist, re-use some of the existing ones for( auto &elem : items ) { item &o = elem.front(); if( o.invlet != 0 ) { it.invlet = o.invlet; o.invlet = 0; return; } } debugmsg( "could not find a hotkey for %s", it.tname() ); }