embeddings:: fixed setting changing

This commit is contained in:
Zeno Rogue 2023-02-10 23:39:49 +01:00
parent 1295ea7920
commit c5e05bd199
2 changed files with 14 additions and 3 deletions

View File

@ -2619,7 +2619,13 @@ EX int config3 = addHook(hooks_configfile, 100, [] {
}
dialog::addHelp(help);
})
->set_reaction(geom3::apply_settings_light);
->set_reaction([] {
bool b = vid.tc_alpha < vid.tc_camera;
if(vid.tc_alpha >= vid.tc_depth) vid.tc_alpha = vid.depth - 1;
if(vid.tc_camera >= vid.tc_depth) vid.tc_camera = vid.depth - 1;
if(vid.tc_alpha == vid.tc_camera) (b ? vid.tc_alpha : vid.tc_camera)--;
geom3::apply_settings_light();
});
param_f(vid.camera, "camera", "3D camera level", 1)
->editable(0, 5, .1, "", "", 'c')
->modif([] (float_setting* x) { x->menu_item_name = (GDIM == 2 ? "Camera level above the plane" : "Z shift"); })

View File

@ -918,6 +918,7 @@ EX namespace geom3 {
}
EX string invalid;
EX bool changing_embedded_settings;
EX ld actual_wall_height() {
if(mhybrid) return cgi.plevel;
@ -935,7 +936,7 @@ EX namespace geom3 {
// tanh(depth) / tanh(camera) == pconf.alpha
invalid = "";
if(GDIM == 3 || flipped) ;
if(GDIM == 3 || flipped || changing_embedded_settings);
else if(vid.tc_alpha < vid.tc_depth && vid.tc_alpha < vid.tc_camera)
pconf.alpha = tan_auto(vid.depth) / tan_auto(vid.camera);
else if(vid.tc_depth < vid.tc_alpha && vid.tc_depth < vid.tc_camera) {
@ -1091,6 +1092,7 @@ EX namespace geom3 {
if(vid.always3) swapdim(-1);
vid.always3 = !vid.always3;
apply_always3();
check_cgi(); cgi.prepare_basics();
if(vid.always3) swapdim(+1);
}
#endif
@ -1151,19 +1153,22 @@ EX namespace geom3 {
EX void apply_settings_full() {
if(vid.always3) {
changing_embedded_settings = true;
geom3::switch_fpp();
delete_sky();
// not sure why this is needed...
resetGL();
geom3::switch_fpp();
changing_embedded_settings = false;
}
}
EX void apply_settings_light() {
if(vid.always3) {
changing_embedded_settings = true;
geom3::switch_always3();
check_cgi(); cgi.prepare_basics();
geom3::switch_always3();
changing_embedded_settings = false;
}
}