mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-12-24 17:10:36 +00:00
remember recent setting changes, and other improvements
This commit is contained in:
parent
ea5ee7eefd
commit
3860e7a81d
131
config.cpp
131
config.cpp
@ -16,6 +16,8 @@ EX eCentering centering;
|
|||||||
|
|
||||||
EX string auto_prefix;
|
EX string auto_prefix;
|
||||||
|
|
||||||
|
EX void add_to_changed(struct setting *f);
|
||||||
|
|
||||||
#if HDR
|
#if HDR
|
||||||
struct supersaver {
|
struct supersaver {
|
||||||
string name;
|
string name;
|
||||||
@ -39,6 +41,7 @@ struct setting {
|
|||||||
string menu_item_name;
|
string menu_item_name;
|
||||||
string help_text;
|
string help_text;
|
||||||
char default_key;
|
char default_key;
|
||||||
|
cld last_value;
|
||||||
virtual bool affects(void *v) { return false; }
|
virtual bool affects(void *v) { return false; }
|
||||||
virtual void add_as_saver() {}
|
virtual void add_as_saver() {}
|
||||||
void show_edit_option() { show_edit_option(default_key); }
|
void show_edit_option() { show_edit_option(default_key); }
|
||||||
@ -49,6 +52,13 @@ struct setting {
|
|||||||
}
|
}
|
||||||
virtual cld get_cld() = 0;
|
virtual cld get_cld() = 0;
|
||||||
setting() { prefix = auto_prefix; }
|
setting() { prefix = auto_prefix; }
|
||||||
|
virtual void check_change() {
|
||||||
|
cld val = get_cld();
|
||||||
|
if(val != last_value) {
|
||||||
|
last_value = val;
|
||||||
|
add_to_changed(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -109,6 +119,7 @@ struct float_setting : public setting {
|
|||||||
struct int_setting : public setting {
|
struct int_setting : public setting {
|
||||||
int *value;
|
int *value;
|
||||||
int dft;
|
int dft;
|
||||||
|
int min_value, max_value, step;
|
||||||
void add_as_saver();
|
void add_as_saver();
|
||||||
reaction_t extra, reaction, sets;
|
reaction_t extra, reaction, sets;
|
||||||
function<void(int_setting*)> modify_me;
|
function<void(int_setting*)> modify_me;
|
||||||
@ -266,6 +277,7 @@ void float_setting::show_edit_option(char key) {
|
|||||||
dialog::add_action([this] () {
|
dialog::add_action([this] () {
|
||||||
add_to_changed(this);
|
add_to_changed(this);
|
||||||
dialog::editNumber(*value, min_value, max_value, step, dft, XLAT(menu_item_name), help_text);
|
dialog::editNumber(*value, min_value, max_value, step, dft, XLAT(menu_item_name), help_text);
|
||||||
|
if(sets) sets();
|
||||||
if(reaction) dialog::reaction = reaction;
|
if(reaction) dialog::reaction = reaction;
|
||||||
if(extra) dialog::extra_options = extra;
|
if(extra) dialog::extra_options = extra;
|
||||||
});
|
});
|
||||||
@ -277,6 +289,7 @@ void int_setting::show_edit_option(char key) {
|
|||||||
dialog::add_action([this] () {
|
dialog::add_action([this] () {
|
||||||
add_to_changed(this);
|
add_to_changed(this);
|
||||||
dialog::editNumber(*value, 0, 100, 1, dft, XLAT(menu_item_name), help_text);
|
dialog::editNumber(*value, 0, 100, 1, dft, XLAT(menu_item_name), help_text);
|
||||||
|
if(sets) sets();
|
||||||
if(reaction) dialog::reaction = reaction;
|
if(reaction) dialog::reaction = reaction;
|
||||||
if(extra) dialog::extra_options = extra;
|
if(extra) dialog::extra_options = extra;
|
||||||
});
|
});
|
||||||
@ -296,6 +309,7 @@ EX float_setting *param_f(ld& val, const string p, const string s, ld dft) {
|
|||||||
u->config_name = s;
|
u->config_name = s;
|
||||||
u->menu_item_name = s;
|
u->menu_item_name = s;
|
||||||
u->value = &val;
|
u->value = &val;
|
||||||
|
u->last_value = dft;
|
||||||
if(dft == 0) {
|
if(dft == 0) {
|
||||||
u->min_value = -100;
|
u->min_value = -100;
|
||||||
u->max_value = +100;
|
u->max_value = +100;
|
||||||
@ -329,8 +343,17 @@ EX int_setting *param_i(int& val, const string s, int dft) {
|
|||||||
u->config_name = s;
|
u->config_name = s;
|
||||||
u->menu_item_name = s;
|
u->menu_item_name = s;
|
||||||
u->value = &val;
|
u->value = &val;
|
||||||
|
u->last_value = dft;
|
||||||
u->dft = dft;
|
u->dft = dft;
|
||||||
val = dft;
|
val = dft;
|
||||||
|
if(dft == 0) {
|
||||||
|
u->min_value = -100;
|
||||||
|
u->max_value = +100;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
u->min_value = 0;
|
||||||
|
u->max_value = 2 * dft;
|
||||||
|
}
|
||||||
u->add_as_saver();
|
u->add_as_saver();
|
||||||
auto f = &*u;
|
auto f = &*u;
|
||||||
params[s] = std::move(u);
|
params[s] = std::move(u);
|
||||||
@ -345,6 +368,7 @@ EX bool_setting *param_b(bool& val, const string s, bool dft) {
|
|||||||
u->config_name = s;
|
u->config_name = s;
|
||||||
u->menu_item_name = s;
|
u->menu_item_name = s;
|
||||||
u->value = &val;
|
u->value = &val;
|
||||||
|
u->last_value = dft;
|
||||||
u->dft = dft;
|
u->dft = dft;
|
||||||
u->switcher = [&val] { val = !val; };
|
u->switcher = [&val] { val = !val; };
|
||||||
val = dft;
|
val = dft;
|
||||||
@ -371,6 +395,7 @@ template<class T> enum_setting<T> *param_enum(T& val, const string p, const stri
|
|||||||
u->value = &val;
|
u->value = &val;
|
||||||
u->dft = dft;
|
u->dft = dft;
|
||||||
val = dft;
|
val = dft;
|
||||||
|
u->last_value = u->get_cld();
|
||||||
u->add_as_saver();
|
u->add_as_saver();
|
||||||
auto f = &*u;
|
auto f = &*u;
|
||||||
params[s] = std::move(u);
|
params[s] = std::move(u);
|
||||||
@ -397,6 +422,7 @@ custom_setting* param_custom(T& val, const string& s, function<void(char)> menui
|
|||||||
u->parameter_name = param_esc(s);
|
u->parameter_name = param_esc(s);
|
||||||
u->config_name = s;
|
u->config_name = s;
|
||||||
u->menu_item_name = s;
|
u->menu_item_name = s;
|
||||||
|
u->last_value = (int) val;
|
||||||
u->custom_viewer = menuitem;
|
u->custom_viewer = menuitem;
|
||||||
u->custom_value = [&val] () { return (cld) val; };
|
u->custom_value = [&val] () { return (cld) val; };
|
||||||
u->custom_affect = [&val] (void *v) { return &val == v; };
|
u->custom_affect = [&val] (void *v) { return &val == v; };
|
||||||
@ -577,11 +603,16 @@ EX void initConfig() {
|
|||||||
addsaver(vid.language, "language", -1);
|
addsaver(vid.language, "language", -1);
|
||||||
param_b(vid.drawmousecircle, "mouse circle", ISMOBILE || ISPANDORA);
|
param_b(vid.drawmousecircle, "mouse circle", ISMOBILE || ISPANDORA);
|
||||||
param_b(vid.revcontrol, "reverse control", false);
|
param_b(vid.revcontrol, "reverse control", false);
|
||||||
param_i(musicvolume, "music volume");
|
param_i(musicvolume, "music volume")
|
||||||
|
->editable(0, 128, 10, "background music volume", "", 'b')
|
||||||
|
->set_sets(sets_music_volume);
|
||||||
#if CAP_SDLAUDIO
|
#if CAP_SDLAUDIO
|
||||||
addsaver(music_out_of_focus, "music out of focus", false);
|
addsaver(music_out_of_focus, "music out of focus", false);
|
||||||
#endif
|
#endif
|
||||||
param_i(effvolume, "sound effect volume");
|
param_i(effvolume, "sound effect volume")
|
||||||
|
->editable(0, 128, 10, "sound effects volume", "", 'e')
|
||||||
|
->set_sets(sets_sfx_volume);
|
||||||
|
|
||||||
param_enum(glyphsortorder, "glyph_sort", "glyph sort order", glyphsortorder)
|
param_enum(glyphsortorder, "glyph_sort", "glyph sort order", glyphsortorder)
|
||||||
->editable({
|
->editable({
|
||||||
{"first on top", ""},
|
{"first on top", ""},
|
||||||
@ -898,6 +929,13 @@ EX void initConfig() {
|
|||||||
|
|
||||||
param_custom(sightrange_bonus, "sightrange_bonus", menuitem_sightrange_bonus, 'r');
|
param_custom(sightrange_bonus, "sightrange_bonus", menuitem_sightrange_bonus, 'r');
|
||||||
param_custom(vid.use_smart_range, "sightrange_style", menuitem_sightrange_style, 's');
|
param_custom(vid.use_smart_range, "sightrange_style", menuitem_sightrange_style, 's');
|
||||||
|
|
||||||
|
param_custom(gp::param.first, "Goldberg x", menuitem_change_variation, 0);
|
||||||
|
param_custom(gp::param.second, "Goldberg y", menuitem_change_variation, 0);
|
||||||
|
param_custom(variation, "variation", menuitem_change_variation, 'v')
|
||||||
|
->help_text = "variation|dual|bitruncated";
|
||||||
|
param_custom(geometry, "geometry", menuitem_change_geometry, 0)
|
||||||
|
->help_text = "hyperbolic|spherical|Euclidean";
|
||||||
}
|
}
|
||||||
|
|
||||||
EX bool inSpecialMode() {
|
EX bool inSpecialMode() {
|
||||||
@ -1070,7 +1108,7 @@ EX void loadNewConfig(FILE *f) {
|
|||||||
EX void loadConfig() {
|
EX void loadConfig() {
|
||||||
|
|
||||||
DEBB(DF_INIT, ("load config"));
|
DEBB(DF_INIT, ("load config"));
|
||||||
vid.xres = 9999; vid.yres = 9999; vid.framelimit = 300;
|
vid.xres = 9999; vid.yres = 9999; vid.framelimit = 75;
|
||||||
FILE *f = fopen(conffile, "rt");
|
FILE *f = fopen(conffile, "rt");
|
||||||
if(f) {
|
if(f) {
|
||||||
int err;
|
int err;
|
||||||
@ -1257,46 +1295,33 @@ EX void menuitem_sightrange(char c IS('c')) {
|
|||||||
dialog::add_action_push(edit_sightrange);
|
dialog::add_action_push(edit_sightrange);
|
||||||
}
|
}
|
||||||
|
|
||||||
EX void menuitem_sfx_volume() {
|
EX void sets_sfx_volume() {
|
||||||
#if CAP_AUDIO
|
dialog::numberdark = dialog::DONT_SHOW;
|
||||||
dialog::addSelItem(XLAT("sound effects volume"), its(effvolume), 'e');
|
#if ISANDROID
|
||||||
dialog::add_action([] {
|
dialog::reaction = [] () {
|
||||||
dialog::editNumber(effvolume, 0, 128, 10, 60, XLAT("sound effects volume"), "");
|
settingsChanged = true;
|
||||||
dialog::numberdark = dialog::DONT_SHOW;
|
};
|
||||||
dialog::reaction = [] () {
|
|
||||||
#if ISANDROID
|
|
||||||
settingsChanged = true;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
dialog::bound_low(0);
|
|
||||||
dialog::bound_up(MIX_MAX_VOLUME);
|
|
||||||
});
|
|
||||||
#endif
|
#endif
|
||||||
|
dialog::bound_low(0);
|
||||||
|
dialog::bound_up(MIX_MAX_VOLUME);
|
||||||
}
|
}
|
||||||
|
|
||||||
EX void menuitem_music_volume() {
|
EX void sets_music_volume() {
|
||||||
#if CAP_AUDIO
|
dialog::numberdark = dialog::DONT_SHOW;
|
||||||
if (!music_available) return;
|
dialog::reaction = [] () {
|
||||||
dialog::addSelItem(XLAT("background music volume"), its(musicvolume), 'b');
|
|
||||||
dialog::add_action([] {
|
|
||||||
dialog::editNumber(musicvolume, 0, 128, 10, 60, XLAT("background music volume"), "");
|
|
||||||
dialog::numberdark = dialog::DONT_SHOW;
|
|
||||||
dialog::reaction = [] () {
|
|
||||||
#if CAP_SDLAUDIO
|
|
||||||
Mix_VolumeMusic(musicvolume);
|
|
||||||
#endif
|
|
||||||
#if ISANDROID
|
|
||||||
settingsChanged = true;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
dialog::bound_low(0);
|
|
||||||
dialog::bound_up(MIX_MAX_VOLUME);
|
|
||||||
#if CAP_SDLAUDIO
|
#if CAP_SDLAUDIO
|
||||||
dialog::extra_options = [] {
|
Mix_VolumeMusic(musicvolume);
|
||||||
dialog::addBoolItem_action(XLAT("play music when out of focus"), music_out_of_focus, 'A');
|
|
||||||
};
|
|
||||||
#endif
|
#endif
|
||||||
});
|
#if ISANDROID
|
||||||
|
settingsChanged = true;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
dialog::bound_low(0);
|
||||||
|
dialog::bound_up(MIX_MAX_VOLUME);
|
||||||
|
#if CAP_SDLAUDIO
|
||||||
|
dialog::extra_options = [] {
|
||||||
|
dialog::addBoolItem_action(XLAT("play music when out of focus"), music_out_of_focus, 'A');
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1552,8 +1577,8 @@ EX void configureOther() {
|
|||||||
// dialog::addBoolItem_action(XLAT("forget faraway cells"), memory_saving_mode, 'y');
|
// dialog::addBoolItem_action(XLAT("forget faraway cells"), memory_saving_mode, 'y');
|
||||||
|
|
||||||
#if CAP_AUDIO
|
#if CAP_AUDIO
|
||||||
menuitem_music_volume();
|
add_edit(musicvolume);
|
||||||
menuitem_sfx_volume();
|
add_edit(effvolume);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
menuitem_sightrange('r');
|
menuitem_sightrange('r');
|
||||||
@ -1683,7 +1708,7 @@ EX void showJoyConfig() {
|
|||||||
EX void projectionDialog() {
|
EX void projectionDialog() {
|
||||||
vid.tc_alpha = ticks;
|
vid.tc_alpha = ticks;
|
||||||
dialog::editNumber(vpconf.alpha, -5, 5, .1, 1,
|
dialog::editNumber(vpconf.alpha, -5, 5, .1, 1,
|
||||||
XLAT("projection"),
|
XLAT("projection distance"),
|
||||||
XLAT("HyperRogue uses the Minkowski hyperboloid model internally. "
|
XLAT("HyperRogue uses the Minkowski hyperboloid model internally. "
|
||||||
"Klein and Poincaré models can be obtained by perspective, "
|
"Klein and Poincaré models can be obtained by perspective, "
|
||||||
"and the Gans model is obtained by orthogonal projection. "
|
"and the Gans model is obtained by orthogonal projection. "
|
||||||
@ -1714,6 +1739,11 @@ EX void projectionDialog() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EX void menuitem_projection_distance(char key) {
|
||||||
|
dialog::addSelItem(XLAT("projection distance"), fts(vpconf.alpha) + " (" + current_proj_name() + ")", key);
|
||||||
|
dialog::add_action(projectionDialog);
|
||||||
|
}
|
||||||
|
|
||||||
EX void explain_detail() {
|
EX void explain_detail() {
|
||||||
dialog::addHelp(XLAT(
|
dialog::addHelp(XLAT(
|
||||||
"Objects at distance less than %1 absolute units "
|
"Objects at distance less than %1 absolute units "
|
||||||
@ -2568,26 +2598,32 @@ EX void configureMouse() {
|
|||||||
vector<setting*> last_changed;
|
vector<setting*> last_changed;
|
||||||
|
|
||||||
EX void add_to_changed(setting *f) {
|
EX void add_to_changed(setting *f) {
|
||||||
|
auto orig_f = f;
|
||||||
for(int i=0; i<isize(last_changed); i++) {
|
for(int i=0; i<isize(last_changed); i++) {
|
||||||
if(last_changed[i] == f)
|
if(last_changed[i] == f)
|
||||||
return;
|
return;
|
||||||
swap(last_changed[i], f);
|
swap(last_changed[i], f);
|
||||||
|
if(f == orig_f) return;
|
||||||
}
|
}
|
||||||
last_changed.push_back(f);
|
last_changed.push_back(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
EX setting *find_edit(void *val) {
|
EX setting *find_edit(void *val) {
|
||||||
for(auto& fs: params)
|
for(auto& fs: params) {
|
||||||
|
fs.second->check_change();
|
||||||
if(fs.second->affects(val))
|
if(fs.second->affects(val))
|
||||||
return &*fs.second;
|
return &*fs.second;
|
||||||
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
EX void add_edit_ptr(void *val) {
|
EX void add_edit_ptr(void *val) {
|
||||||
int found = 0;
|
int found = 0;
|
||||||
for(auto& fs: params)
|
for(auto& fs: params) {
|
||||||
|
fs.second->check_change();
|
||||||
if(fs.second->affects(val))
|
if(fs.second->affects(val))
|
||||||
fs.second->show_edit_option(), found++;
|
fs.second->show_edit_option(), found++;
|
||||||
|
}
|
||||||
if(found != 1) println(hlog, "found = ", found);
|
if(found != 1) println(hlog, "found = ", found);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2620,6 +2656,8 @@ EX void find_setting() {
|
|||||||
else dialog::addBreak(100);
|
else dialog::addBreak(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dialog::addBreak(100);
|
||||||
|
dialog::addInfo("press letters to search");
|
||||||
dialog::addSelItem("matching items", its(isize(found)), 0);
|
dialog::addSelItem("matching items", its(isize(found)), 0);
|
||||||
dialog::display();
|
dialog::display();
|
||||||
|
|
||||||
@ -2632,7 +2670,9 @@ EX void find_setting() {
|
|||||||
|
|
||||||
EX void edit_all_settings() {
|
EX void edit_all_settings() {
|
||||||
gamescreen(1);
|
gamescreen(1);
|
||||||
dialog::init(XLAT("edit all"));
|
dialog::init(XLAT("recently changed settings"));
|
||||||
|
|
||||||
|
for(auto &fs: params) fs.second->check_change();
|
||||||
|
|
||||||
int id = 0;
|
int id = 0;
|
||||||
for(auto l: last_changed)
|
for(auto l: last_changed)
|
||||||
@ -2704,6 +2744,9 @@ EX void showSettings() {
|
|||||||
dialog::addBreak(100);
|
dialog::addBreak(100);
|
||||||
|
|
||||||
#if CAP_CONFIG
|
#if CAP_CONFIG
|
||||||
|
dialog::addItem(XLAT("recently changed settings"), '/');
|
||||||
|
dialog::add_action_push(edit_all_settings);
|
||||||
|
|
||||||
dialog::addItem(XLAT("save the current config"), 's');
|
dialog::addItem(XLAT("save the current config"), 's');
|
||||||
dialog::add_action(saveConfig);
|
dialog::add_action(saveConfig);
|
||||||
|
|
||||||
|
58
geom-exp.cpp
58
geom-exp.cpp
@ -605,6 +605,36 @@ EX string full_geometry_name() {
|
|||||||
return fgname;
|
return fgname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void action_change_variation() {
|
||||||
|
if(0) ;
|
||||||
|
#if CAP_ARCM
|
||||||
|
else if(arcm::in()) arcm::next_variation();
|
||||||
|
#endif
|
||||||
|
else if(euc::in(2,4) || !CAP_GP) dialog::do_if_confirmed([] {
|
||||||
|
set_variation(PURE ? eVariation::bitruncated : eVariation::pure);
|
||||||
|
start_game();
|
||||||
|
});
|
||||||
|
#if CAP_GP
|
||||||
|
else // if(S3 == 3)
|
||||||
|
gp::configure();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EX void menuitem_change_variation(char key) {
|
||||||
|
dialog::addSelItem(XLAT("variations"), gp::operation_name(), key);
|
||||||
|
dialog::add_action(action_change_variation);
|
||||||
|
}
|
||||||
|
|
||||||
|
EX void menuitem_change_geometry(char key) {
|
||||||
|
dialog::addSelItem(XLAT("geometry/topology/tiling"), full_geometry_name(), key);
|
||||||
|
dialog::add_action_push(current_filter ? ge_select_tiling : ge_select_filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
EX void menuitem_projection(char key) {
|
||||||
|
dialog::addSelItem(XLAT("projection"), current_proj_name(), key);
|
||||||
|
dialog::add_action_push(models::model_menu);
|
||||||
|
}
|
||||||
|
|
||||||
EX void showEuclideanMenu() {
|
EX void showEuclideanMenu() {
|
||||||
// for(int i=2; i<lt; i++) landvisited[i] = true;
|
// for(int i=2; i<lt; i++) landvisited[i] = true;
|
||||||
|
|
||||||
@ -612,10 +642,10 @@ EX void showEuclideanMenu() {
|
|||||||
gamescreen(0);
|
gamescreen(0);
|
||||||
|
|
||||||
dialog::init(XLAT("experiment with geometry"));
|
dialog::init(XLAT("experiment with geometry"));
|
||||||
|
|
||||||
dialog::addSelItem(XLAT("geometry"), geometry_name(), 'd');
|
|
||||||
dialog::add_action([] { pushScreen(ge_select_tiling); pushScreen(ge_select_filter); });
|
|
||||||
|
|
||||||
|
dialog::addSelItem(XLAT("geometry"), geometry_name(), 'd');
|
||||||
|
dialog::add_action([] { pushScreen(ge_select_tiling); pushScreen(ge_select_filter); });
|
||||||
|
|
||||||
dialog::addSelItem(XLAT("basic tiling"), XLAT(ginf[geometry].tiling_name), 't');
|
dialog::addSelItem(XLAT("basic tiling"), XLAT(ginf[geometry].tiling_name), 't');
|
||||||
dialog::add_action([] {
|
dialog::add_action([] {
|
||||||
if(!current_filter || !current_filter->test()) set_default_filter();
|
if(!current_filter || !current_filter->test()) set_default_filter();
|
||||||
@ -876,23 +906,8 @@ EX void showEuclideanMenu() {
|
|||||||
add_edit_wall_quality('W');
|
add_edit_wall_quality('W');
|
||||||
}
|
}
|
||||||
else if(WDIM == 3 || kite::in() || arb::in()) dialog::addBreak(100);
|
else if(WDIM == 3 || kite::in() || arb::in()) dialog::addBreak(100);
|
||||||
else {
|
else
|
||||||
dialog::addSelItem(XLAT("variations"), gp::operation_name(), 'v');
|
menuitem_change_variation('v');
|
||||||
dialog::add_action([] {
|
|
||||||
if(0) ;
|
|
||||||
#if CAP_ARCM
|
|
||||||
else if(arcm::in()) arcm::next_variation();
|
|
||||||
#endif
|
|
||||||
else if(euc::in(2,4) || !CAP_GP) dialog::do_if_confirmed([] {
|
|
||||||
set_variation(PURE ? eVariation::bitruncated : eVariation::pure);
|
|
||||||
start_game();
|
|
||||||
});
|
|
||||||
#if CAP_GP
|
|
||||||
else // if(S3 == 3)
|
|
||||||
gp::configure();
|
|
||||||
#endif
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if(in_s2xe()) {
|
if(in_s2xe()) {
|
||||||
dialog::addSelItem(XLAT("precision of S2xE rings"), its(s2xe::qrings), '5');
|
dialog::addSelItem(XLAT("precision of S2xE rings"), its(s2xe::qrings), '5');
|
||||||
@ -981,8 +996,7 @@ EX void showEuclideanMenu() {
|
|||||||
dialog::addItem(XLAT("3D configuration"), '9');
|
dialog::addItem(XLAT("3D configuration"), '9');
|
||||||
dialog::add_action_push(show3D);
|
dialog::add_action_push(show3D);
|
||||||
}
|
}
|
||||||
dialog::addSelItem(XLAT("projection"), current_proj_name(), '1');
|
menuitem_projection('1');
|
||||||
dialog::add_action_push(models::model_menu);
|
|
||||||
if(nonisotropic && !sl2)
|
if(nonisotropic && !sl2)
|
||||||
dialog::addBoolItem_action(XLAT("geodesic movement in Sol/Nil"), nisot::geodesic_movement, 'G');
|
dialog::addBoolItem_action(XLAT("geodesic movement in Sol/Nil"), nisot::geodesic_movement, 'G');
|
||||||
#if CAP_CRYSTAL && MAXMDIM >= 4
|
#if CAP_CRYSTAL && MAXMDIM >= 4
|
||||||
|
14
models.cpp
14
models.cpp
@ -454,8 +454,7 @@ EX namespace models {
|
|||||||
if(among(vpmodel, mdDisk, mdBall, mdHyperboloid, mdRotatedHyperboles, mdPanini)) {
|
if(among(vpmodel, mdDisk, mdBall, mdHyperboloid, mdRotatedHyperboles, mdPanini)) {
|
||||||
dynamicval<eModel> v(vpconf.model, vpconf.model);
|
dynamicval<eModel> v(vpconf.model, vpconf.model);
|
||||||
if(vpmodel == mdHyperboloid) vpconf.model = mdDisk;
|
if(vpmodel == mdHyperboloid) vpconf.model = mdDisk;
|
||||||
dialog::addSelItem(XLAT("projection distance"), fts(vpconf.alpha) + " (" + current_proj_name() + ")", 'p');
|
add_edit(vpconf.alpha);
|
||||||
dialog::add_action(projectionDialog);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(has_orientation(vpmodel)) {
|
if(has_orientation(vpmodel)) {
|
||||||
@ -895,7 +894,6 @@ EX namespace models {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void add_model_config() {
|
void add_model_config() {
|
||||||
addsaverenum(pmodel, "used model", mdDisk);
|
|
||||||
addsaver(polygonal::SI, "polygon sides");
|
addsaver(polygonal::SI, "polygon sides");
|
||||||
param_f(polygonal::STAR, "star", "polygon star factor");
|
param_f(polygonal::STAR, "star", "polygon star factor");
|
||||||
addsaver(polygonal::deg, "polygonal degree");
|
addsaver(polygonal::deg, "polygonal degree");
|
||||||
@ -914,8 +912,13 @@ EX namespace models {
|
|||||||
param_f(pconf.halfplane_scale, "hp", "halfplane scale", 1);
|
param_f(pconf.halfplane_scale, "hp", "halfplane scale", 1);
|
||||||
|
|
||||||
auto add_all = [&] (projection_configuration& p, string pp, string sp) {
|
auto add_all = [&] (projection_configuration& p, string pp, string sp) {
|
||||||
|
|
||||||
bool rug = pp != "";
|
bool rug = pp != "";
|
||||||
dynamicval<string> ds(auto_prefix, rug ? "[rug] " : "");
|
dynamicval<string> ds(auto_prefix, rug ? "[rug] " : "");
|
||||||
|
|
||||||
|
addsaverenum(p.model, pp+"used model", mdDisk);
|
||||||
|
param_custom(pmodel, "projection|Poincare|Klein|half-plane|perspective", menuitem_projection, '1');
|
||||||
|
|
||||||
param_f(p.model_orientation, pp+"mori", sp+"model orientation", 0);
|
param_f(p.model_orientation, pp+"mori", sp+"model orientation", 0);
|
||||||
param_f(p.model_orientation_yz, pp+"mori_yz", sp+"model orientation-yz", 0);
|
param_f(p.model_orientation_yz, pp+"mori_yz", sp+"model orientation-yz", 0);
|
||||||
|
|
||||||
@ -1001,7 +1004,10 @@ EX namespace models {
|
|||||||
param_f(p.scale, sp+"scale", 1);
|
param_f(p.scale, sp+"scale", 1);
|
||||||
param_f(p.xposition, sp+"xposition", 0);
|
param_f(p.xposition, sp+"xposition", 0);
|
||||||
param_f(p.yposition, sp+"yposition", 0);
|
param_f(p.yposition, sp+"yposition", 0);
|
||||||
param_f(p.alpha, sp+"projection", 1);
|
|
||||||
|
addsaver(p.alpha, sp+"projection", 1);
|
||||||
|
param_custom(p.alpha, sp+"projection distance", menuitem_projection_distance, 'p');
|
||||||
|
|
||||||
param_f(p.camera_angle, pp+"cameraangle", sp+"camera angle", 0);
|
param_f(p.camera_angle, pp+"cameraangle", sp+"camera angle", 0);
|
||||||
addsaver(p.ballproj, sp+"ballproj", 1);
|
addsaver(p.ballproj, sp+"ballproj", 1);
|
||||||
|
|
||||||
|
@ -1301,8 +1301,8 @@ void settings_menu() {
|
|||||||
dialog::add_action_push(multi::get_key_configurer(1, move_names, "Bringris keys"));
|
dialog::add_action_push(multi::get_key_configurer(1, move_names, "Bringris keys"));
|
||||||
|
|
||||||
#if CAP_AUDIO
|
#if CAP_AUDIO
|
||||||
menuitem_sfx_volume();
|
add_edit(effvolume);
|
||||||
menuitem_music_volume();
|
add_edit(musicvolume);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
dialog::addBreak(100);
|
dialog::addBreak(100);
|
||||||
|
@ -936,10 +936,8 @@ EX void menu() {
|
|||||||
|
|
||||||
if(models::is_3d(vpconf) || rug::rugged) {
|
if(models::is_3d(vpconf) || rug::rugged) {
|
||||||
dialog::addInfo("SVG screenshots do not work in this 3D mode", 0xFF0000);
|
dialog::addInfo("SVG screenshots do not work in this 3D mode", 0xFF0000);
|
||||||
if(GDIM == 2 && !rug::rugged) {
|
if(GDIM == 2 && !rug::rugged)
|
||||||
dialog::addSelItem(XLAT("projection"), current_proj_name(), '1');
|
menuitem_projection('1');
|
||||||
dialog::add_action_push(models::model_menu);
|
|
||||||
}
|
|
||||||
#if CAP_WRL
|
#if CAP_WRL
|
||||||
else {
|
else {
|
||||||
dialog::addItem(XLAT("WRL"), 'w');
|
dialog::addItem(XLAT("WRL"), 'w');
|
||||||
@ -981,8 +979,7 @@ EX void menu() {
|
|||||||
else if(models::is_perspective(vpconf.model)) {
|
else if(models::is_perspective(vpconf.model)) {
|
||||||
#endif
|
#endif
|
||||||
dialog::addInfo("this does not work well in perspective projections", 0xFF8000);
|
dialog::addInfo("this does not work well in perspective projections", 0xFF8000);
|
||||||
dialog::addSelItem(XLAT("projection"), current_proj_name(), '1');
|
menuitem_projection('1');
|
||||||
dialog::add_action_push(models::model_menu);
|
|
||||||
}
|
}
|
||||||
dialog::addBoolItem_action("generate a model for 3D printing", wrl::print, 'p');
|
dialog::addBoolItem_action("generate a model for 3D printing", wrl::print, 'p');
|
||||||
#if CAP_PNG
|
#if CAP_PNG
|
||||||
|
Loading…
Reference in New Issue
Block a user