1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-12-24 17:10:36 +00:00

rogueviz::objmodel:: precision is now configurable via o-key

This commit is contained in:
Zeno Rogue 2021-03-31 12:55:31 +02:00
parent 084fa5ea5e
commit 599d446038
2 changed files with 35 additions and 1 deletions

View File

@ -22,6 +22,8 @@ bool model::available() {
}
void model::load_obj(model_data& md) {
md.prec_used = prec;
auto& objects = md.objs;
fhstream fs(path+fname, "rt");
@ -246,6 +248,12 @@ model_data& model::get() {
md = std::make_unique<model_data>();
load_obj(*md);
}
if(md && md->prec_used < prec) {
println(hlog, "need prec=", prec, " used = ", md->prec_used);
md->objs.clear();
load_obj(*md);
}
return *md;
}
@ -256,5 +264,28 @@ void model_data::render(const shiftmatrix& V) {
}
}
void model_settings() {
emptyscreen();
dialog::init();
add_edit(prec);
dialog::addBack();
dialog::display();
}
void o_key(o_funcs& v) {
v.push_back(named_dialog("set model settings", model_settings));
}
void add_model_settings() {
rogueviz::rv_hook(hooks_o_key, 200, o_key);
}
auto cf = addHook(hooks_configfile, 100, [] {
param_f(prec, "obj_prec")
->editable(1, 100, 1, "3D model precision", "higher-precision models take more time to load and to render.", 'p')
->set_sets([] { dialog::numberdark = dialog::DONT_SHOW; })
;
});
}
}

View File

@ -238,7 +238,7 @@ namespace objmodels {
using transformer = std::function<tf_result(hyperpoint)>;
using subdivider = std::function<int(vector<hyperpoint>&)>;
inline int prec = 1;
inline ld prec = 1;
struct object {
hpcshape sh;
@ -247,6 +247,7 @@ namespace objmodels {
};
struct model_data : gi_extension {
ld prec_used;
vector<shared_ptr<object>> objs;
void render(const shiftmatrix& V);
};
@ -286,6 +287,8 @@ namespace objmodels {
bool available();
};
void add_model_settings();
}