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:
parent
a01d5c7dbe
commit
8139e65c8e
31
geometry.cpp
31
geometry.cpp
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user