本文整理汇总了C++中inventory::has_charges方法的典型用法代码示例。如果您正苦于以下问题:C++ inventory::has_charges方法的具体用法?C++ inventory::has_charges怎么用?C++ inventory::has_charges使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类inventory
的用法示例。
在下文中一共展示了inventory::has_charges方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: switch
std::vector<comp_selection<tool_comp>> craft_command::check_tool_components_missing(
const inventory &map_inv ) const
{
std::vector<comp_selection<tool_comp>> missing;
for( const auto &tool_sel : tool_selections ) {
itype_id type = tool_sel.comp.type;
if( tool_sel.comp.count > 0 ) {
long count = tool_sel.comp.count * batch_size;
switch( tool_sel.use_from ) {
case use_from_player:
if( !crafter->has_charges( type, count ) ) {
missing.push_back( tool_sel );
}
break;
case use_from_map:
if( !map_inv.has_charges( type, count ) ) {
missing.push_back( tool_sel );
}
break;
case use_from_both:
case use_from_none:
case cancel:
break;
}
} else if( !crafter->has_amount( type, 1 ) && !map_inv.has_tools( type, 1 ) ) {
missing.push_back( tool_sel );
}
}
return missing;
}
示例2: has
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 );
}
}
示例3: abs
std::vector<comp_selection<item_comp>> craft_command::check_item_components_missing(
const inventory &map_inv ) const
{
std::vector<comp_selection<item_comp>> missing;
for( const auto &item_sel : item_selections ) {
itype_id type = item_sel.comp.type;
item_comp component = item_sel.comp;
long count = ( component.count > 0 ) ? component.count * batch_size : abs( component.count );
if( item::count_by_charges( type ) && count > 0 ) {
switch( item_sel.use_from ) {
case use_from_player:
if( !crafter->has_charges( type, count ) ) {
missing.push_back( item_sel );
}
break;
case use_from_map:
if( !map_inv.has_charges( type, count ) ) {
missing.push_back( item_sel );
}
break;
case use_from_both:
if( !( crafter->charges_of( type ) + map_inv.charges_of( type ) >= count ) ) {
missing.push_back( item_sel );
}
break;
case use_from_none:
case cancel:
break;
}
} else {
// Counting by units, not charges.
switch( item_sel.use_from ) {
case use_from_player:
if( !crafter->has_amount( type, count ) ) {
missing.push_back( item_sel );
}
break;
case use_from_map:
if( !map_inv.has_components( type, count ) ) {
missing.push_back( item_sel );
}
break;
case use_from_both:
if( !( crafter->amount_of( type ) + map_inv.amount_of( type ) >= count ) ) {
missing.push_back( item_sel );
}
break;
case use_from_none:
case cancel:
break;
}
}
}
return missing;
}
示例4: player_can_build
bool player_can_build(player &p, inventory pinv, construction *con)
{
if (p.skillLevel("carpentry") < con->difficulty) {
return false;
}
bool has_tool = false;
bool has_component = false;
bool tools_required = false;
bool components_required = false;
for (int j = 0; j < con->tools.size(); j++) {
if (con->tools[j].size() > 0) {
tools_required = true;
has_tool = false;
for (unsigned k = 0; k < con->tools[j].size(); k++) {
if (pinv.has_amount(con->tools[j][k].type, 1)) {
has_tool = true;
con->tools[j][k].available = 1;
} else {
con->tools[j][k].available = -1;
}
}
if (!has_tool) { // missing one of the tools for this stage
break;
}
}
}
for (int j = 0; j < con->components.size(); ++j) {
if (con->components[j].size() > 0) {
components_required = true;
has_component = false;
for (unsigned k = 0; k < con->components[j].size(); k++) {
if (( item_controller->find_template(con->components[j][k].type)->is_ammo() &&
pinv.has_charges(con->components[j][k].type,
con->components[j][k].count) ) ||
(!item_controller->find_template(con->components[j][k].type)->is_ammo() &&
pinv.has_amount (con->components[j][k].type,
con->components[j][k].count) ))
{
has_component = true;
con->components[j][k].available = 1;
} else {
con->components[j][k].available = -1;
}
}
if (!has_component) { // missing one of the comps for this stage
break;
}
}
}
return (has_component || !components_required) &&
(has_tool || !tools_required);
}
示例5: get_color
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";
}
示例6: has
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 );
}
}
示例7: has
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 );
}
}
示例8: player_can_build
bool game::player_can_build(player &p, inventory inv, constructable* con,
int level, bool specific)
// defaults: level==0, specific==false
{
if (level < 0) // used as escape value in place_construction()
return false;
int stop = (specific ? level : con->stages.size());
do {
construction_stage stage = con->stages[level];
int number_of_tools = 0, number_of_components = 0;
int number_of_req_tools = 0, number_of_req_components = 0;
for (int j = 0; j < 3; j++) {
// counting available tools
if (stage.tools[j].size() > 0) {
number_of_req_tools++;
for (int k = 0; k < stage.tools[j].size(); k++)
if (inv.has_amount(stage.tools[j][k], 1)) {
number_of_tools++;
break;
}
}
// counting available components
if (stage.components[j].size() > 0) {
number_of_req_components++;
for (int k = 0; k < stage.components[j].size(); k++)
if (( itypes[stage.components[j][k].type]->is_ammo() &&
inv.has_charges(stage.components[j][k].type,
stage.components[j][k].count) ) ||
(!itypes[stage.components[j][k].type]->is_ammo() &&
inv.has_amount (stage.components[j][k].type,
stage.components[j][k].count) )) {
number_of_components++;
break;
}
}
}
// difficulty check + summary
if (!(p.sklevel[sk_carpentry] < stage.difficulty) &&
number_of_tools == number_of_req_tools &&
number_of_components == number_of_req_components)
return true;
level++;
} while (level < stop);
return false;
}
示例9: get_color
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";
}
示例10: check_enough_materials
bool requirements::check_enough_materials( const item_comp& comp, const inventory& crafting_inv ) const
{
if( comp.available != a_true ) {
return false;
}
const itype *it = item_controller->find_template( comp.type );
const tool_comp *tq = find_by_type( tools, comp.type );
if( tq != nullptr ) {
// The very same item type is also needed as tool!
// Use charges of it, or use it by count?
const int tc = tq->count < 0 ? std::abs( tq->count ) : 1;
// Check for components + tool count. Check item amount (excludes
// pseudo items) and tool amount (includes pseudo items)
// Imagine: required = 1 welder (component) + 1 welder (tool),
// available = 1 welder (real item), 1 welding rig (creates
// a pseudo welder item). has_components(welder,2) returns false
// as there is only one real welder available, but has_tools(welder,2)
// returns true.
// Keep in mind that both requirements (tool+component) are checked
// before this. That assures that one real item is actually available,
// two welding rigs (and no real welder) would make this component
// non-available even before this function is called.
// Only ammo and (some) food is counted by charges, both are unlikely
// to appear as tool, but it's possible /-:
bool has_comps;
if( it->count_by_charges() && comp.count > 0 ) {
has_comps = crafting_inv.has_charges( comp.type, comp.count + tc );
} else {
has_comps = crafting_inv.has_components( comp.type, abs( comp.count ) + tc );
}
if( !has_comps && !crafting_inv.has_tools( comp.type, comp.count + tc ) ) {
comp.available = a_insufficent;
}
}
for( const auto &ql : it->qualities ) {
const quality_requirement *qr = find_by_type( qualities, ql.first );
if( qr == nullptr || qr->level > ql.second ) {
continue;
}
// This item can be used for the quality requirement, same as above for specific
// tools applies.
if( !crafting_inv.has_items_with_quality( qr->type, qr->level, qr->count + abs(comp.count) ) ) {
comp.available = a_insufficent;
}
}
return comp.available == a_true;
}
示例11: get_color
std::string item_comp::get_color( bool has_one, const inventory &crafting_inv, int batch ) const
{
if( type == "rope_30" || type == "rope_6" ) {
if( g->u.has_trait( "WEB_ROPE" ) && g->u.get_hunger() <= 300 ) {
return "ltgreen"; // Show that WEB_ROPE is on the job!
}
}
const int cnt = std::abs( count ) * batch;
if( available == a_insufficent ) {
return "brown";
} else if( item::count_by_charges( type ) ) {
if( crafting_inv.has_charges( type, cnt ) ) {
return "green";
}
} else if( crafting_inv.has_components( type, cnt ) ) {
return "green";
}
return has_one ? "dkgray" : "red";
}
示例12: get_color
std::string item_comp::get_color( bool has_one, const inventory &crafting_inv ) const
{
if( type == "rope_30" || type == "rope_6" ) {
if( g->u.has_trait( "WEB_ROPE" ) && g->u.hunger <= 300 ) {
return "ltgreen"; // Show that WEB_ROPE is on the job!
}
}
const itype *it = item_controller->find_template( type );
if( available == a_insufficent ) {
return "brown";
} else if( it->count_by_charges() && count > 0 ) {
if( crafting_inv.has_charges( type, count ) ) {
return "green";
}
} else if( crafting_inv.has_components( type, abs( count ) ) ) {
return "green";
}
return has_one ? "dkgray" : "red";
}
示例13: has
bool item_comp::has( const inventory &crafting_inv ) const
{
// If you've Rope Webs, you can spin up the webbing to replace any amount of
// rope your projects may require. But you need to be somewhat nourished:
// Famished or worse stops it.
if( type == "rope_30" || type == "rope_6" ) {
// NPC don't craft?
// TODO: what about the amount of ropes vs the hunger?
if( g->u.has_trait( "WEB_ROPE" ) && g->u.hunger <= 300 ) {
return true;
}
}
const itype *it = item_controller->find_template( type );
if( it->count_by_charges() && count > 0 ) {
return crafting_inv.has_charges( type, count );
} else {
return crafting_inv.has_components( type, abs( count ) );
}
}
示例14: player_can_build
bool game::player_can_build(player &p, inventory inv, constructable* con,
int level, bool cont)
{
if (p.sklevel[sk_carpentry] < con->difficulty)
return false;
if (level < 0)
level = con->stages.size();
int start = 0;
if (cont)
start = level;
for (int i = start; i < con->stages.size() && i <= level; i++) {
construction_stage stage = con->stages[i];
for (int j = 0; j < 3; j++) {
if (stage.tools[j].size() > 0) {
bool has_tool = false;
for (int k = 0; k < stage.tools[j].size() && !has_tool; k++) {
if (inv.has_amount(stage.tools[j][k], 1))
has_tool = true;
}
if (!has_tool)
return false;
}
if (stage.components[j].size() > 0) {
bool has_component = false;
for (int k = 0; k < stage.components[j].size() && !has_component; k++) {
if (( itypes[stage.components[j][k].type]->is_ammo() &&
inv.has_charges(stage.components[j][k].type,
stage.components[j][k].count) ) ||
(!itypes[stage.components[j][k].type]->is_ammo() &&
inv.has_amount (stage.components[j][k].type,
stage.components[j][k].count) ))
has_component = true;
}
if (!has_component)
return false;
}
}
}
return true;
}
示例15: player_can_build
bool game::player_can_build(player &p, inventory pinv, constructable* con,
const int level, bool cont, bool exact_level)
{
int last_level = level;
// default behavior: return true if any of the stages up to L can be constr'd
// if exact_level, require that this level be constructable
if (p.skillLevel("carpentry") < con->difficulty)
return false;
if (level < 0)
last_level = con->stages.size();
int start = 0;
if (cont)
start = level;
bool can_build_any = false;
for (int i = start; i < con->stages.size() && i <= last_level; i++) {
construction_stage* stage = &(con->stages[i]);
bool has_tool = false;
bool has_component = false;
bool tools_required = false;
bool components_required = false;
for (int j = 0; j < 10; j++) {
if (stage->tools[j].size() > 0) {
tools_required = true;
has_tool = false;
for (int k = 0; k < stage->tools[j].size(); k++) {
if (pinv.has_amount(stage->tools[j][k].type, 1))
{
has_tool = true;
stage->tools[j][k].available = 1;
}
else
{
stage->tools[j][k].available = -1;
}
}
if (!has_tool) // missing one of the tools for this stage
break;
}
if (stage->components[j].size() > 0) {
components_required = true;
has_component = false;
for (int k = 0; k < stage->components[j].size(); k++) {
if (( item_controller->find_template(stage->components[j][k].type)->is_ammo() &&
pinv.has_charges(stage->components[j][k].type,
stage->components[j][k].count) ) ||
(!item_controller->find_template(stage->components[j][k].type)->is_ammo() &&
pinv.has_amount (stage->components[j][k].type,
stage->components[j][k].count) ))
{
has_component = true;
stage->components[j][k].available = 1;
}
else
{
stage->components[j][k].available = -1;
}
}
if (!has_component) // missing one of the comps for this stage
break;
}
} // j in [0,2]
can_build_any |= (has_component || !components_required) &&
(has_tool || !tools_required);
if (exact_level && (i == level)) {
return ((has_component || !components_required) &&
(has_tool || !tools_required));
}
} // stage[i]
return can_build_any;
}