select_pc() allow_choose_all argument, eliminate overloaded version
This commit is contained in:
@@ -860,7 +860,7 @@ void handle_bash_pick(location destination, bool& did_something, bool& need_redr
|
|||||||
if(!adjacent(destination,univ.party.town_loc))
|
if(!adjacent(destination,univ.party.town_loc))
|
||||||
add_string_to_buf(" Must be adjacent.");
|
add_string_to_buf(" Must be adjacent.");
|
||||||
else {
|
else {
|
||||||
short pc = char_select_pc(0, isBash ? "Who will bash?" : "Who will pick the lock?");
|
short pc = select_pc(0, isBash ? "Who will bash?" : "Who will pick the lock?");
|
||||||
if(pc == 6) {
|
if(pc == 6) {
|
||||||
add_string_to_buf(" Cancelled.");
|
add_string_to_buf(" Cancelled.");
|
||||||
overall_mode = MODE_TOWN;
|
overall_mode = MODE_TOWN;
|
||||||
@@ -1900,12 +1900,12 @@ void handle_menu_spell(eSpell spell_picked) {
|
|||||||
store_mage = spell_picked;
|
store_mage = spell_picked;
|
||||||
else store_priest = spell_picked;
|
else store_priest = spell_picked;
|
||||||
if(spell_type == eSkill::MAGE_SPELLS && (*spell_picked).need_select != SELECT_NO) {
|
if(spell_type == eSkill::MAGE_SPELLS && (*spell_picked).need_select != SELECT_NO) {
|
||||||
if((store_spell_target = char_select_pc((*spell_picked).need_select == SELECT_ANY ? 1 : 0,"Cast spell on who?")) == 6)
|
if((store_spell_target = select_pc((*spell_picked).need_select == SELECT_ANY ? 1 : 0,"Cast spell on who?")) == 6)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(spell_type == eSkill::PRIEST_SPELLS && (*spell_picked).need_select != SELECT_NO)
|
if(spell_type == eSkill::PRIEST_SPELLS && (*spell_picked).need_select != SELECT_NO)
|
||||||
if((store_spell_target = char_select_pc((*spell_picked).need_select == SELECT_ANY ? 1 : 0,"Cast spell on who?")) == 6)
|
if((store_spell_target = select_pc((*spell_picked).need_select == SELECT_ANY ? 1 : 0,"Cast spell on who?")) == 6)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3367,7 +3367,7 @@ void handle_drop_pc() {
|
|||||||
}else if(is_combat()){
|
}else if(is_combat()){
|
||||||
add_string_to_buf("Delete PC: Not in combat.");
|
add_string_to_buf("Delete PC: Not in combat.");
|
||||||
}else{
|
}else{
|
||||||
int choice = char_select_pc(1,"Delete who?");
|
int choice = select_pc(1,"Delete who?");
|
||||||
if(choice < 6) {
|
if(choice < 6) {
|
||||||
std::string confirm = cChoiceDlog("delete-pc-confirm",{"yes","no"}).show();
|
std::string confirm = cChoiceDlog("delete-pc-confirm",{"yes","no"}).show();
|
||||||
if(confirm == "no"){
|
if(confirm == "no"){
|
||||||
@@ -4044,7 +4044,7 @@ void handle_new_pc_graphic() {
|
|||||||
if(recording){
|
if(recording){
|
||||||
record_action("handle_new_pc_graphic", "");
|
record_action("handle_new_pc_graphic", "");
|
||||||
}
|
}
|
||||||
short choice = char_select_pc(1,"New graphic for who?");
|
short choice = select_pc(1,"New graphic for who?");
|
||||||
if(choice < 6)
|
if(choice < 6)
|
||||||
pick_pc_graphic(choice,1,nullptr);
|
pick_pc_graphic(choice,1,nullptr);
|
||||||
draw_terrain();
|
draw_terrain();
|
||||||
@@ -4054,7 +4054,7 @@ void handle_rename_pc() {
|
|||||||
if(recording){
|
if(recording){
|
||||||
record_action("handle_rename_pc", "");
|
record_action("handle_rename_pc", "");
|
||||||
}
|
}
|
||||||
short choice = char_select_pc(1,"Rename who?");
|
short choice = select_pc(1,"Rename who?");
|
||||||
if(choice < 6)
|
if(choice < 6)
|
||||||
pick_pc_name(choice,nullptr);
|
pick_pc_name(choice,nullptr);
|
||||||
put_pc_screen();
|
put_pc_screen();
|
||||||
|
@@ -936,7 +936,7 @@ void handle_talk_node(int which_talk_entry) {
|
|||||||
save_talk_str2 = "";
|
save_talk_str2 = "";
|
||||||
break;
|
break;
|
||||||
case eTalkNode::TRAINING:
|
case eTalkNode::TRAINING:
|
||||||
if((get_pc = char_select_pc(0,"Train who?")) < 6) {
|
if((get_pc = select_pc(0,"Train who?")) < 6) {
|
||||||
can_save_talk = false;
|
can_save_talk = false;
|
||||||
spend_xp(get_pc,1, nullptr);
|
spend_xp(get_pc,1, nullptr);
|
||||||
}
|
}
|
||||||
|
@@ -190,7 +190,7 @@ void give_thing(short pc_num, short item_num) {
|
|||||||
add_string_to_buf("Give: Item is cursed.");
|
add_string_to_buf("Give: Item is cursed.");
|
||||||
else {
|
else {
|
||||||
item_store = univ.party[pc_num].items[item_num];
|
item_store = univ.party[pc_num].items[item_num];
|
||||||
who_to = char_select_pc(3,"Give item to who?");
|
who_to = select_pc(3,"Give item to who?");
|
||||||
if((overall_mode == MODE_COMBAT) && !adjacent(univ.party[pc_num].combat_pos,univ.party[who_to].combat_pos)) {
|
if((overall_mode == MODE_COMBAT) && !adjacent(univ.party[pc_num].combat_pos,univ.party[who_to].combat_pos)) {
|
||||||
add_string_to_buf("Give: Must be adjacent.");
|
add_string_to_buf("Give: Must be adjacent.");
|
||||||
who_to = 6;
|
who_to = 6;
|
||||||
@@ -912,24 +912,28 @@ short get_num_response(short min, short max, std::string prompt, std::vector<std
|
|||||||
|
|
||||||
static bool select_pc_event_filter (cDialog& me, std::string item_hit, eKeyMod) {
|
static bool select_pc_event_filter (cDialog& me, std::string item_hit, eKeyMod) {
|
||||||
me.toast(true);
|
me.toast(true);
|
||||||
if(item_hit != "cancel") {
|
if(item_hit == "pick-all"){
|
||||||
|
me.setResult<short>(7);
|
||||||
|
}else if(item_hit != "cancel"){
|
||||||
short which_pc = item_hit[item_hit.length() - 1] - '1';
|
short which_pc = item_hit[item_hit.length() - 1] - '1';
|
||||||
me.setResult<short>(which_pc);
|
me.setResult<short>(which_pc);
|
||||||
} else me.setResult<short>(6);
|
}else me.setResult<short>(6);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// mode determines which PCs can be picked
|
// mode determines which PCs can be picked
|
||||||
// 0 - only living pcs, 1 - any pc, 2 - only dead pcs, 3 - only living pcs with inventory space
|
// 0 - only living pcs, 1 - any pc, 2 - only dead pcs, 3 - only living pcs with inventory space
|
||||||
short char_select_pc(short mode,const char *title) {
|
short select_pc(short mode, std::string title, bool allow_choose_all) {
|
||||||
short item_hit;
|
short item_hit;
|
||||||
|
|
||||||
set_cursor(sword_curs);
|
set_cursor(sword_curs);
|
||||||
|
|
||||||
cDialog selectPc(*ResMgr::dialogs.get("select-pc"));
|
cDialog selectPc(*ResMgr::dialogs.get("select-pc"));
|
||||||
selectPc.attachClickHandlers(select_pc_event_filter, {"cancel", "pick1", "pick2", "pick3", "pick4", "pick5", "pick6"});
|
selectPc.attachClickHandlers(select_pc_event_filter, {"cancel", "pick1", "pick2", "pick3", "pick4", "pick5", "pick6", "pick-all"});
|
||||||
|
|
||||||
selectPc["title"].setText(title);
|
// The default title is defined in select-pc.xml
|
||||||
|
if(!title.empty())
|
||||||
|
selectPc["title"].setText(title);
|
||||||
|
|
||||||
for(short i = 0; i < 6; i++) {
|
for(short i = 0; i < 6; i++) {
|
||||||
std::string n = boost::lexical_cast<std::string>(i + 1);
|
std::string n = boost::lexical_cast<std::string>(i + 1);
|
||||||
@@ -957,13 +961,14 @@ short char_select_pc(short mode,const char *title) {
|
|||||||
selectPc["pc" + n].setText(univ.party[i].name);
|
selectPc["pc" + n].setText(univ.party[i].name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!allow_choose_all){
|
||||||
|
selectPc["pick-all"].hide();
|
||||||
|
selectPc["all"].hide();
|
||||||
|
}
|
||||||
|
|
||||||
selectPc.run();
|
selectPc.run();
|
||||||
item_hit = selectPc.getResult<short>();
|
item_hit = selectPc.getResult<short>();
|
||||||
|
|
||||||
return item_hit;
|
return item_hit;
|
||||||
}
|
}
|
||||||
|
|
||||||
short select_pc(short mode) {
|
|
||||||
return char_select_pc(mode,"Select a character:");
|
|
||||||
}
|
|
||||||
|
@@ -41,5 +41,5 @@ std::string get_text_response(std::string prompt = "", pic_num_t pic = 16);
|
|||||||
// Specify cancel_value to show a cancel button, which will return the given value (for example, -1)
|
// Specify cancel_value to show a cancel button, which will return the given value (for example, -1)
|
||||||
short get_num_response(short min, short max, std::string prompt, std::vector<std::string> choice_names = {}, boost::optional<short> cancel_value = boost::none);
|
short get_num_response(short min, short max, std::string prompt, std::vector<std::string> choice_names = {}, boost::optional<short> cancel_value = boost::none);
|
||||||
|
|
||||||
short char_select_pc(short mode,const char *title);
|
// Prompt the player to choose a party member. Returns 0-5 for a pc, 6 for cancel, or 7 for all.
|
||||||
short select_pc(short mode);
|
short select_pc(short mode, std::string title="", bool allow_choose_all = false);
|
||||||
|
@@ -2649,7 +2649,7 @@ void oneshot_spec(const runtime_state& ctx) {
|
|||||||
*ctx.ret_a = 1;
|
*ctx.ret_a = 1;
|
||||||
} else {
|
} else {
|
||||||
if(!is_combat()) {
|
if(!is_combat()) {
|
||||||
dlg_res = char_select_pc(0,"Trap! Who will disarm?");
|
dlg_res = select_pc(0,"Trap! Who will disarm?");
|
||||||
if(dlg_res == 6){
|
if(dlg_res == 6){
|
||||||
*ctx.ret_a = 1;
|
*ctx.ret_a = 1;
|
||||||
set_sd = false;
|
set_sd = false;
|
||||||
@@ -4086,7 +4086,7 @@ void townmode_spec(const runtime_state& ctx) {
|
|||||||
check_mess = false;
|
check_mess = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
r1 = char_select_pc(0,"Which character goes?");
|
r1 = select_pc(0,"Which character goes?");
|
||||||
if(ctx.which_mode == eSpecCtx::OUT_MOVE || ctx.which_mode == eSpecCtx::TOWN_MOVE || ctx.which_mode == eSpecCtx::COMBAT_MOVE)
|
if(ctx.which_mode == eSpecCtx::OUT_MOVE || ctx.which_mode == eSpecCtx::TOWN_MOVE || ctx.which_mode == eSpecCtx::COMBAT_MOVE)
|
||||||
*ctx.ret_a = 1;
|
*ctx.ret_a = 1;
|
||||||
if(r1 != 6) {
|
if(r1 != 6) {
|
||||||
|
Reference in New Issue
Block a user