1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2025-08-26 15:32:19 +00:00

rogueviz:: fixed notknot

This commit is contained in:
Zeno Rogue 2025-08-23 13:38:07 +02:00
parent a01d5c7dbe
commit 8139e65c8e
2 changed files with 38 additions and 11 deletions

View File

@ -481,6 +481,7 @@ hpcshape
void prepare_compute3();
void prepare_shapes();
void prepare_usershapes();
void generate_faces();
void hpcpush(hyperpoint h);
void hpc_connect_ideal(hyperpoint a, hyperpoint b);
@ -626,6 +627,23 @@ EX bool special_fake() {
return fake::in() && (BITRUNCATED || (GOLDBERG && S3 == 4 && gp::param.first == 1 && gp::param.second == 1) || (UNRECTIFIED && gp::param.first == 1 && gp::param.second == 1));
}
EX hookset<bool(geometry_information*)> hooks_generate_faces;
void geometry_information::generate_faces() {
if(callhandlers(false, hooks_generate_faces, this)) return;
#if MAXMDIM >= 4
else if(reg3::in()) reg3::generate();
else if(euc::in(3)) euc::generate();
#if CAP_SOLV
else if(sn::in()) sn::create_faces();
#endif
#if CAP_BT
else if(bt::in()) bt::create_faces();
#endif
else if(nil && !mtwisted) nilv::create_faces();
#endif
}
void geometry_information::prepare_basics() {
DEBBI(DF_INIT | DF_POLY | DF_GEOM, ("prepare_basics"));
@ -800,17 +818,8 @@ void geometry_information::prepare_basics() {
if(geometry == gHoroRec || kite::in() || sol || nil || nih) hexvdist = rhexf = .5, tessf = .5, scalefactor = .5, crossf = hcrossf7/2;
if(bt::in()) scalefactor *= min<ld>(vid.binary_width, 1), crossf *= min<ld>(vid.binary_width, 1);
#endif
#if MAXMDIM >= 4
if(reg3::in()) reg3::generate();
if(euc::in(3)) euc::generate();
#if CAP_SOLV
else if(sn::in()) sn::create_faces();
#endif
#if CAP_BT
else if(bt::in()) bt::create_faces();
#endif
else if(nil && !mtwisted) nilv::create_faces();
#endif
generate_faces();
scalefactor = crossf / hcrossf7;
orbsize = crossf;

View File

@ -1113,6 +1113,18 @@ struct hrmap_notknot : hrmap {
return adj(c->master, i);
}
int shvid(cell *c) override {
dynamicval<eGeometry> g(geometry, base);
dynamicval<hrmap*> m(currentmap, euc);
return currentmap->shvid(all[indices[c->master]]->where->c7);
}
subcellshape& get_cellshape(cell* c) override {
dynamicval<eGeometry> g(geometry, base);
dynamicval<hrmap*> m(currentmap, euc);
return currentmap->get_cellshape(all[indices[c->master]]->where->c7);
}
~hrmap_notknot() {
for(auto uc: all) {
if(uc && uc->result) {
@ -1587,6 +1599,12 @@ auto shot_hooks = addHook(hooks_initialize, 100, create_notknot)
->set_reaction(regenerate);
param_i(loop_any, "nk_loopany");
})
+ addHook(hooks_generate_faces, 100, [] (geometry_information *gi) {
if(geometry != gNotKnot) return false;
dynamicval<eGeometry> b(geometry, base);
gi->generate_faces();
return true;
})
#ifndef NOTKNOT
+ addHook_slideshows(20, portal_slideshow)
#endif