예제 #1
0
item *inventory::most_loaded_gun()
{
    item *ret = &null_item_reference();
    int max = 0;
    for( auto &elem : items ) {
        item &gun = elem.front();
        if( !gun.is_gun() ) {
            continue;
        }

        const auto required = gun.ammo_required();
        int cur = 0;
        if( required <= 0 ) {
            // Arbitrary
            cur = 5;
        } else {
            cur = gun.ammo_remaining() / required;
        }

        if( cur > max ) {
            ret = &gun;
            max = cur;
        }
    }
    return ret;
}
예제 #2
0
item *inventory::most_appropriate_painkiller( int pain )
{
    int difference = 9999;
    item *ret = &null_item_reference();
    for( auto &elem : items ) {
        int diff = 9999;
        itype_id type = elem.front().typeId();
        if( type == "aspirin" ) {
            diff = abs( pain - 15 );
        } else if( type == "codeine" ) {
            diff = abs( pain - 30 );
        } else if( type == "oxycodone" ) {
            diff = abs( pain - 60 );
        } else if( type == "heroin" ) {
            diff = abs( pain - 100 );
        } else if( type == "tramadol" ) {
            diff = abs( pain - 40 ) / 2; // Bonus since it's long-acting
        }

        if( diff < difference ) {
            difference = diff;
            ret = &( elem.front() );
        }
    }
    return ret;
}
예제 #3
0
const item &inventory::find_item( int position ) const
{
    if( position < 0 || position >= static_cast<int>( items.size() ) ) {
        return null_item_reference();
    }
    invstack::const_iterator iter = items.begin();
    for( int j = 0; j < position; ++j ) {
        ++iter;
    }
    return iter->front();
}
예제 #4
0
item *inventory::best_for_melee( player &p, double &best )
{
    item *ret = &null_item_reference();
    for( auto &elem : items ) {
        auto score = p.melee_value( elem.front() );
        if( score > best ) {
            best = score;
            ret = &( elem.front() );
        }
    }

    return ret;
}
예제 #5
0
item &item_at( player &p, int pos, inventory_location loc )
{
    switch( loc ) {
        case GROUND:
            return g->m.i_at( p.pos() )[pos];
        case INVENTORY:
            return p.i_at( pos );
        case WORN:
            return p.i_at( -2 - pos );
        case WIELDED_OR_WORN:
            return p.i_at( -1 - pos );
        default:
            FAIL( "unimplemented" );
            break;
    }
    return null_item_reference();
}