本文整理汇总了C++中invlet_wrapper::valid方法的典型用法代码示例。如果您正苦于以下问题:C++ invlet_wrapper::valid方法的具体用法?C++ invlet_wrapper::valid怎么用?C++ invlet_wrapper::valid使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类invlet_wrapper
的用法示例。
在下文中一共展示了invlet_wrapper::valid方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: restack
void inventory::restack(player *p)
{
// tasks that the old restack seemed to do:
// 1. reassign inventory letters
// 2. remove items from non-matching stacks
// 3. combine matching stacks
if (!p) {
return;
}
std::list<item> to_restack;
int idx = 0;
for (invstack::iterator iter = items.begin(); iter != items.end(); ++iter, ++idx) {
std::list<item> &stack = *iter;
item &topmost = stack.front();
const int ipos = p->invlet_to_position(topmost.invlet);
if( !inv_chars.valid( topmost.invlet ) || ( ipos != INT_MIN && ipos != idx ) ) {
assign_empty_invlet(topmost);
for( std::list<item>::iterator stack_iter = stack.begin();
stack_iter != stack.end(); ++stack_iter ) {
stack_iter->invlet = topmost.invlet;
}
}
// remove non-matching items, stripping off end of stack so the first item keeps the invlet.
while( stack.size() > 1 && !topmost.stacks_with(stack.back()) ) {
to_restack.splice(to_restack.begin(), *iter, --stack.end());
}
}
// combine matching stacks
// separate loop to ensure that ALL stacks are homogeneous
for (invstack::iterator iter = items.begin(); iter != items.end(); ++iter) {
for (invstack::iterator other = iter; other != items.end(); ++other) {
if (iter != other && iter->front().stacks_with( other->front() ) ) {
if( other->front().count_by_charges() ) {
iter->front().charges += other->front().charges;
} else {
iter->splice(iter->begin(), *other);
}
other = items.erase(other);
--other;
}
}
}
//re-add non-matching items
for( auto &elem : to_restack ) {
add_item( elem );
}
//Ensure that all items in the same stack have the same invlet.
for( std::list< item > &outer : items ) {
for( item &inner : outer ) {
inner.invlet = outer.front().invlet;
}
}
}
示例2: power_bionics
//.........这里部分代码省略.........
scroll_position--;
}
if( scroll_position < max_scroll_position &&
cursor - scroll_position > LIST_HEIGHT - half_list_view_location ) {
scroll_position =
std::max( std::min<int>( current_bionic_list->size() - LIST_HEIGHT,
cursor - half_list_view_location ), 0 );
}
} else if( menu_mode == REASSIGNING ) {
menu_mode = ACTIVATING;
if( action == "CONFIRM" && !current_bionic_list->empty() ) {
auto &bio_list = tab_mode == TAB_ACTIVE ? active : passive;
tmp = bio_list[cursor];
} else {
tmp = bionic_by_invlet( ch );
}
if( tmp == nullptr ) {
// Selected an non-existing bionic (or Escape, or ...)
continue;
}
redraw = true;
const long newch = popup_getkey( _( "%s; enter new letter. Space to clear. Esc to cancel." ),
tmp->id->name.c_str() );
wrefresh( wBio );
if( newch == ch || newch == KEY_ESCAPE ) {
continue;
}
if( newch == ' ' ) {
tmp->invlet = ' ';
continue;
}
if( !bionic_chars.valid( newch ) ) {
popup( _( "Invalid bionic letter. Only those characters are valid:\n\n%s" ),
bionic_chars.get_allowed_chars().c_str() );
continue;
}
bionic *otmp = bionic_by_invlet( newch );
if( otmp != nullptr ) {
std::swap( tmp->invlet, otmp->invlet );
} else {
tmp->invlet = newch;
}
// TODO: show a message like when reassigning a key to an item?
} else if( action == "NEXT_TAB" ) {
redraw = true;
scroll_position = 0;
cursor = 0;
if( tab_mode == TAB_ACTIVE ) {
tab_mode = TAB_PASSIVE;
} else {
tab_mode = TAB_ACTIVE;
}
} else if( action == "PREV_TAB" ) {
redraw = true;
scroll_position = 0;
cursor = 0;
if( tab_mode == TAB_PASSIVE ) {
tab_mode = TAB_ACTIVE;
} else {
tab_mode = TAB_PASSIVE;
}
} else if( action == "REASSIGN" ) {
menu_mode = REASSIGNING;
} else if( action == "TOGGLE_EXAMINE" ) { // switches between activation and examination
示例3: power_mutations
//.........这里部分代码省略.........
}
mvwprintz( wBio, list_start_y + i, second_column + 2, type,
mut_desc.str().c_str() );
}
}
// Scrollbar
if(scroll_position > 0) {
mvwputch(wBio, HEADER_LINE_Y + 2, 0, c_ltgreen, '^');
}
if(scroll_position < max_scroll_position && max_scroll_position > 0) {
mvwputch(wBio, (menu_mode == "examining" ? DESCRIPTION_LINE_Y : HEIGHT - 1) - 1,
0, c_ltgreen, 'v');
}
}
wrefresh(wBio);
show_mutations_titlebar(w_title, this, menu_mode);
const std::string action = ctxt.handle_input();
const long ch = ctxt.get_raw_input().get_first_input();
if (menu_mode == "reassigning") {
menu_mode = "activating";
const auto mut_id = trait_by_invlet( ch );
if( mut_id.empty() ) {
// Selected an non-existing mutation (or escape, or ...)
continue;
}
redraw = true;
const long newch = popup_getkey(_("%s; enter new letter."),
mutation_branch::get_name( mut_id ).c_str());
wrefresh(wBio);
if(newch == ch || newch == ' ' || newch == KEY_ESCAPE) {
continue;
}
if( !mutation_chars.valid( newch ) ) {
popup( _("Invalid mutation letter. Only those characters are valid:\n\n%s"),
mutation_chars.get_allowed_chars().c_str() );
continue;
}
const auto other_mut_id = trait_by_invlet( newch );
if( !other_mut_id.empty() ) {
std::swap(my_mutations[mut_id].key, my_mutations[other_mut_id].key);
} else {
my_mutations[mut_id].key = newch;
}
// TODO: show a message like when reassigning a key to an item?
} else if (action == "DOWN") {
if(scroll_position < max_scroll_position) {
scroll_position++;
redraw = true;
}
} else if (action == "UP") {
if(scroll_position > 0) {
scroll_position--;
redraw = true;
}
} else if (action == "REASSIGN") {
menu_mode = "reassigning";
} else if (action == "TOGGLE_EXAMINE") { // switches between activation and examination
menu_mode = menu_mode == "activating" ? "examining" : "activating";
werase(w_description);
draw_exam_window(wBio, DESCRIPTION_LINE_Y, false);
redraw = true;
}else if (action == "HELP_KEYBINDINGS") {
redraw = true;
} else {
const auto mut_id = trait_by_invlet( ch );