mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-02-05 05:30:09 +00:00
list settings may now be configured to need confirmation to change
This commit is contained in:
parent
f76ccef90f
commit
8984cd8cd2
20
config.cpp
20
config.cpp
@ -47,6 +47,7 @@ struct setting {
|
|||||||
reaction_t reaction;
|
reaction_t reaction;
|
||||||
char default_key;
|
char default_key;
|
||||||
bool is_editable;
|
bool is_editable;
|
||||||
|
bool needs_confirm;
|
||||||
supersaver *saver;
|
supersaver *saver;
|
||||||
virtual bool available() { if(restrict) return restrict(); return true; }
|
virtual bool available() { if(restrict) return restrict(); return true; }
|
||||||
virtual bool affects(void *v) { return false; }
|
virtual bool affects(void *v) { return false; }
|
||||||
@ -58,7 +59,7 @@ struct setting {
|
|||||||
virtual string search_key() {
|
virtual string search_key() {
|
||||||
return parameter_name + "|" + config_name + "|" + menu_item_name + "|" + help_text;
|
return parameter_name + "|" + config_name + "|" + menu_item_name + "|" + help_text;
|
||||||
}
|
}
|
||||||
explicit setting() { restrict = auto_restrict; is_editable = false; }
|
explicit setting() { restrict = auto_restrict; is_editable = false; needs_confirm = false; }
|
||||||
virtual void check_change() { }
|
virtual void check_change() { }
|
||||||
reaction_t sets;
|
reaction_t sets;
|
||||||
setting *set_sets(const reaction_t& s) { sets = s; return this; }
|
setting *set_sets(const reaction_t& s) { sets = s; return this; }
|
||||||
@ -162,6 +163,10 @@ template<class T> struct enum_setting : list_setting {
|
|||||||
list_setting::editable(o, menu_item_name, key);
|
list_setting::editable(o, menu_item_name, key);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
enum_setting<T>* set_need_confirm() {
|
||||||
|
needs_confirm = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/** transmatrix with equality, so we can construct val_setting<matrix_eq> */
|
/** transmatrix with equality, so we can construct val_setting<matrix_eq> */
|
||||||
@ -1542,6 +1547,7 @@ EX void initConfig() {
|
|||||||
-> editable({{"blade", "Standard Rogue weapon. Bump into a monster to hit. Most monsters attack you the same way."},
|
-> editable({{"blade", "Standard Rogue weapon. Bump into a monster to hit. Most monsters attack you the same way."},
|
||||||
{"crossbow", "Hits all monsters in a straight line, but slow to reload. Press 'f' or click the crossbow icon to target."}},
|
{"crossbow", "Hits all monsters in a straight line, but slow to reload. Press 'f' or click the crossbow icon to target."}},
|
||||||
"weapon selection", 'w')
|
"weapon selection", 'w')
|
||||||
|
-> set_need_confirm()
|
||||||
-> set_value_to = [] (bow::eWeapon wpn) { bool b = game_active; if(wpn != bow::weapon) stop_game(); bow::weapon = wpn;
|
-> set_value_to = [] (bow::eWeapon wpn) { bool b = game_active; if(wpn != bow::weapon) stop_game(); bow::weapon = wpn;
|
||||||
peace::on = false; if(dual::state) dual::disable(); if(multi::players > 1 && !shmup::on) multi::players = 1;
|
peace::on = false; if(dual::state) dual::disable(); if(multi::players > 1 && !shmup::on) multi::players = 1;
|
||||||
if(b) start_game();
|
if(b) start_game();
|
||||||
@ -1550,6 +1556,7 @@ EX void initConfig() {
|
|||||||
-> editable({{"bull line", "Can go in either direction on odd shapes. 3 turns to reload."},
|
-> editable({{"bull line", "Can go in either direction on odd shapes. 3 turns to reload."},
|
||||||
{"geodesic", "Graph geodesic: any sequence of tiles is OK as long as there are no shortcuts. 4 turns to reload."}},
|
{"geodesic", "Graph geodesic: any sequence of tiles is OK as long as there are no shortcuts. 4 turns to reload."}},
|
||||||
"crossbow straight line style", 'l')
|
"crossbow straight line style", 'l')
|
||||||
|
-> set_need_confirm()
|
||||||
-> set_value_to = [] (bow::eCrossbowStyle s) { bool b = game_active; if(s != bow::style) stop_game(); bow::style = s; if(b) start_game(); };
|
-> set_value_to = [] (bow::eCrossbowStyle s) { bool b = game_active; if(s != bow::style) stop_game(); bow::style = s; if(b) start_game(); };
|
||||||
param_b(bow::bump_to_shoot, "bump_to_shoot", true)->editable("bump to shoot", 'b');
|
param_b(bow::bump_to_shoot, "bump_to_shoot", true)->editable("bump to shoot", 'b');
|
||||||
|
|
||||||
@ -3770,7 +3777,7 @@ void list_setting::show_edit_option(int key) {
|
|||||||
if(get_value() < 0 || get_value() >= isize(options)) opt = its(get_value());
|
if(get_value() < 0 || get_value() >= isize(options)) opt = its(get_value());
|
||||||
else opt = options[get_value()].first;
|
else opt = options[get_value()].first;
|
||||||
dialog::addSelItem(XLAT(menu_item_name), XLAT(opt), key);
|
dialog::addSelItem(XLAT(menu_item_name), XLAT(opt), key);
|
||||||
dialog::add_action_push([this] {
|
reaction_t screen = [this] {
|
||||||
add_to_changed(this);
|
add_to_changed(this);
|
||||||
cmode = sm::SIDE | sm::MAYDARK;
|
cmode = sm::SIDE | sm::MAYDARK;
|
||||||
gamescreen();
|
gamescreen();
|
||||||
@ -3783,7 +3790,11 @@ void list_setting::show_edit_option(int key) {
|
|||||||
if(need_list >= 2) dialog::start_list(1500, 1500, 'a');
|
if(need_list >= 2) dialog::start_list(1500, 1500, 'a');
|
||||||
for(int i=0; i<q; i++) {
|
for(int i=0; i<q; i++) {
|
||||||
dialog::addBoolItem(XLAT(options[i].first), get_value() == i, need_list >= 2 ? dialog::list_fake_key++ : 'a' + i);
|
dialog::addBoolItem(XLAT(options[i].first), get_value() == i, need_list >= 2 ? dialog::list_fake_key++ : 'a' + i);
|
||||||
dialog::add_action([this, i, need_list] { set_value(i); if(reaction) reaction(); if(need_list == 0) popScreen(); });
|
auto action = [this, i, need_list] { set_value(i); if(reaction) reaction(); if(need_list == 0) popScreen(); };
|
||||||
|
if(needs_confirm)
|
||||||
|
dialog::add_action_confirmed(action);
|
||||||
|
else
|
||||||
|
dialog::add_action(action);
|
||||||
if(need_list == 0 && options[i].second != "") {
|
if(need_list == 0 && options[i].second != "") {
|
||||||
dialog::addBreak(100);
|
dialog::addBreak(100);
|
||||||
dialog::addHelp(XLAT(options[i].second));
|
dialog::addHelp(XLAT(options[i].second));
|
||||||
@ -3799,7 +3810,8 @@ void list_setting::show_edit_option(int key) {
|
|||||||
}
|
}
|
||||||
dialog::addBack();
|
dialog::addBack();
|
||||||
dialog::display();
|
dialog::display();
|
||||||
});
|
};
|
||||||
|
dialog::add_action_push(screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
EX void showSettings() {
|
EX void showSettings() {
|
||||||
|
@ -661,7 +661,7 @@ EX void showChangeMode() {
|
|||||||
menuitem_land_structure('l');
|
menuitem_land_structure('l');
|
||||||
|
|
||||||
dialog::addBoolItem(XLAT("weapon selection"), bow::weapon, 'b');
|
dialog::addBoolItem(XLAT("weapon selection"), bow::weapon, 'b');
|
||||||
dialog::add_action_confirmed([] { pushScreen(bow::showMenu); });
|
dialog::add_action_push(bow::showMenu);
|
||||||
|
|
||||||
dialog::addBoolItem(XLAT("puzzle/exploration mode"), peace::on, 'p');
|
dialog::addBoolItem(XLAT("puzzle/exploration mode"), peace::on, 'p');
|
||||||
dialog::add_action_push(peace::showMenu);
|
dialog::add_action_push(peace::showMenu);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user