std::string tool_comp::get_color( bool has_one, const inventory &crafting_inv, int batch ) const { if( available == a_insufficent ) { return "brown"; } else if( !by_charges() && crafting_inv.has_tools( type, std::abs( count ) ) ) { return "green"; } else if( by_charges() && crafting_inv.has_charges( type, count * batch ) ) { return "green"; } return has_one ? "dkgray" : "red"; }
std::string tool_comp::get_color( bool has_one, const inventory &crafting_inv, int batch ) const { if( type == "goggles_welding" ) { if( g->u.has_bionic( "bio_sunglasses" ) || g->u.is_wearing( "rm13_armor_on" ) ) { return "cyan"; } } if( available == a_insufficent ) { return "brown"; } else if( !by_charges() && crafting_inv.has_tools( type, std::abs( count ) ) ) { return "green"; } else if( by_charges() && crafting_inv.has_charges( type, count * batch ) ) { return "green"; } return has_one ? "dkgray" : "red"; }
bool tool_comp::has( const inventory &crafting_inv, int batch ) const { if( !by_charges() ) { return crafting_inv.has_tools( type, std::abs( count ) ); } else { return crafting_inv.has_charges( type, count * batch ); } }
std::string tool_comp::to_string( int batch ) const { if( by_charges() ) { //~ <tool-name> (<numer-of-charges> charges) return string_format( ngettext( "%s (%d charge)", "%s (%d charges)", count * batch ), item::nname( type ).c_str(), count * batch ); } else { return item::nname( type, abs( count ) ); } }
bool tool_comp::has( const inventory &crafting_inv, int batch ) const { if( g->u.has_trait( "DEBUG_HS" ) ) { return true; } if( !by_charges() ) { return crafting_inv.has_tools( type, std::abs( count ) ); } else { return crafting_inv.has_charges( type, count * batch ); } }
bool tool_comp::has( const inventory &crafting_inv, int batch ) const { if( type == "goggles_welding" ) { if( g->u.has_bionic( "bio_sunglasses" ) || g->u.is_wearing( "rm13_armor_on" ) ) { return true; } } if( !by_charges() ) { return crafting_inv.has_tools( type, std::abs( count ) ); } else { return crafting_inv.has_charges( type, count * batch ); } }
bool tool_comp::has( const inventory &crafting_inv, int batch, std::function<void( int )> visitor ) const { if( g->u.has_trait( trait_DEBUG_HS ) ) { return true; } if( !by_charges() ) { return crafting_inv.has_tools( type, std::abs( count ) ); } else { int charges_found = crafting_inv.charges_of( type, count * batch ); if( charges_found == count * batch ) { return true; } const auto &binned = crafting_inv.get_binned_items(); const auto iter = binned.find( type ); if( iter == binned.end() ) { return false; } bool has_UPS = false; for( const item *it : iter->second ) { it->visit_items( [&has_UPS]( const item * e ) { if( e->has_flag( "USE_UPS" ) ) { has_UPS = true; return VisitResponse::ABORT; } return VisitResponse::NEXT; } ); } if( has_UPS ) { int UPS_charges_used = crafting_inv.charges_of( "UPS", ( count * batch ) - charges_found ); if( visitor && UPS_charges_used + charges_found >= ( count * batch ) ) { visitor( UPS_charges_used ); } charges_found += UPS_charges_used; } return charges_found == count * batch; } }