mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-01-26 17:06:59 +00:00
alternative honeycomb in Nil
This commit is contained in:
parent
2f353a844c
commit
bc2ce4f3dc
@ -928,6 +928,7 @@ EX void check_cgi() {
|
|||||||
if(prod) V("PS", its(product::csteps));
|
if(prod) V("PS", its(product::csteps));
|
||||||
|
|
||||||
if(geometry == gFieldQuotient) { V("S3=", its(S3)); V("S7=", its(S7)); }
|
if(geometry == gFieldQuotient) { V("S3=", its(S3)); V("S7=", its(S7)); }
|
||||||
|
if(nil) V("NIL", its(S7));
|
||||||
|
|
||||||
if(binarytiling) V("BT", fts(vid.binary_width));
|
if(binarytiling) V("BT", fts(vid.binary_width));
|
||||||
|
|
||||||
|
@ -773,13 +773,29 @@ EX namespace nilv {
|
|||||||
hyperpoint mvec_to_point(mvec m) { return hpxy3(m[0], m[1], m[2]); }
|
hyperpoint mvec_to_point(mvec m) { return hpxy3(m[0], m[1], m[2]); }
|
||||||
|
|
||||||
#if HDR
|
#if HDR
|
||||||
static const int nilv_S7 = 6;
|
struct nilstructure {
|
||||||
|
vector<mvec> movevectors;
|
||||||
|
vector<vector<hyperpoint>> facevertices;
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
nilstructure ns6 = {
|
||||||
array<mvec, nilv_S7> movevectors = {{ mvec(-1,0,0), mvec(-1,0,1), mvec(0,-1,0), mvec(0,0,-1), mvec(1,0,0), mvec(1,0,-1), mvec(0,1,0), mvec(0,0,1) }};
|
{{ mvec(-1,0,0), mvec(0,-1,0), mvec(0,0,-1), mvec(1,0,0), mvec(0,1,0), mvec(0,0,1) }},
|
||||||
|
|
||||||
EX array<vector<hyperpoint>, nilv_S7> facevertices = {{
|
{{
|
||||||
|
{ point31(-0.5,-0.5,-0.25), point31(-0.5,-0.5,0.75), point31(-0.5,0.5,0.25), point31(-0.5,0.5,-0.75), },
|
||||||
|
{ point31(0.5,-0.5,-0.5), point31(0.5,-0.5,0.5), point31(-0.5,-0.5,0.5), point31(-0.5,-0.5,-0.5), },
|
||||||
|
{ point31(0,0,-0.5), point31(-0.5,0.5,-0.75), point31(-0.5,-0.5,-0.25), point31(0,0,-0.5), point31(-0.5,-0.5,-0.25), point31(-0.5,-0.5,-0.5), point31(0,0,-0.5), point31(-0.5,-0.5,-0.5), point31(0.5,-0.5,-0.5), point31(0,0,-0.5), point31(0.5,-0.5,-0.5), point31(0.5,-0.5,-0.75), point31(0,0,-0.5), point31(0.5,-0.5,-0.75), point31(0.5,0.5,-0.25), point31(0,0,-0.5), point31(0.5,0.5,-0.25), point31(0.5,0.5,-0.5), point31(0,0,-0.5), point31(0.5,0.5,-0.5), point31(-0.5,0.5,-0.5), point31(0,0,-0.5), point31(-0.5,0.5,-0.5), point31(-0.5,0.5,-0.75), },
|
||||||
|
{ point31(0.5,0.5,-0.25), point31(0.5,0.5,0.75), point31(0.5,-0.5,0.25), point31(0.5,-0.5,-0.75), },
|
||||||
|
{ point31(-0.5,0.5,-0.5), point31(-0.5,0.5,0.5), point31(0.5,0.5,0.5), point31(0.5,0.5,-0.5), },
|
||||||
|
{ point31(0,0,0.5), point31(-0.5,0.5,0.25), point31(-0.5,-0.5,0.75), point31(0,0,0.5), point31(-0.5,-0.5,0.75), point31(-0.5,-0.5,0.5), point31(0,0,0.5), point31(-0.5,-0.5,0.5), point31(0.5,-0.5,0.5), point31(0,0,0.5), point31(0.5,-0.5,0.5), point31(0.5,-0.5,0.25), point31(0,0,0.5), point31(0.5,-0.5,0.25), point31(0.5,0.5,0.75), point31(0,0,0.5), point31(0.5,0.5,0.75), point31(0.5,0.5,0.5), point31(0,0,0.5), point31(0.5,0.5,0.5), point31(-0.5,0.5,0.5), point31(0,0,0.5), point31(-0.5,0.5,0.5), point31(-0.5,0.5,0.25), },
|
||||||
|
}}
|
||||||
|
};
|
||||||
|
|
||||||
|
nilstructure ns8 = {
|
||||||
|
{{ mvec(-1,0,0), mvec(-1,0,1), mvec(0,-1,0), mvec(0,0,-1), mvec(1,0,0), mvec(1,0,-1), mvec(0,1,0), mvec(0,0,1) }},
|
||||||
|
|
||||||
|
{{
|
||||||
{ point31(-0.5,-0.5,-0.25), point31(-0.5,-0.5,0.75), point31(-0.5,0.5,-0.25), },
|
{ point31(-0.5,-0.5,-0.25), point31(-0.5,-0.5,0.75), point31(-0.5,0.5,-0.25), },
|
||||||
{ point31(-0.5,-0.5,0.75), point31(-0.5,0.5,0.75), point31(-0.5,0.5,-0.25), },
|
{ point31(-0.5,-0.5,0.75), point31(-0.5,0.5,0.75), point31(-0.5,0.5,-0.25), },
|
||||||
{ point31(-0.5,-0.5,-0.25), point31(-0.5,-0.5,0.75), point31(0.5,-0.5,0.25), point31(0.5,-0.5,-0.75), },
|
{ point31(-0.5,-0.5,-0.25), point31(-0.5,-0.5,0.75), point31(0.5,-0.5,0.25), point31(0.5,-0.5,-0.75), },
|
||||||
@ -788,24 +804,16 @@ EX namespace nilv {
|
|||||||
{ point31(0.5,0.5,-0.75), point31(0.5,0.5,0.25), point31(0.5,-0.5,-0.75), },
|
{ point31(0.5,0.5,-0.75), point31(0.5,0.5,0.25), point31(0.5,-0.5,-0.75), },
|
||||||
{ point31(-0.5,0.5,0.75), point31(-0.5,0.5,-0.25), point31(0.5,0.5,-0.75), point31(0.5,0.5,0.25), },
|
{ point31(-0.5,0.5,0.75), point31(-0.5,0.5,-0.25), point31(0.5,0.5,-0.75), point31(0.5,0.5,0.25), },
|
||||||
{ point31(-0.5,-0.5,0.75), point31(-0.5,0.5,0.75), point31(0.5,0.5,0.25), point31(0.5,-0.5,0.25), },
|
{ point31(-0.5,-0.5,0.75), point31(-0.5,0.5,0.75), point31(0.5,0.5,0.25), point31(0.5,-0.5,0.25), },
|
||||||
}};
|
}}
|
||||||
*/
|
};
|
||||||
|
|
||||||
array<mvec, nilv_S7> movevectors = {{ mvec(-1,0,0), mvec(0,-1,0), mvec(0,0,-1), mvec(1,0,0), mvec(0,1,0), mvec(0,0,1) }};
|
EX nilstructure& current_ns() { return S7 == 6 ? ns6 : ns8; }
|
||||||
|
|
||||||
EX array<vector<hyperpoint>, nilv_S7> facevertices = {{
|
|
||||||
{ point31(-0.5,-0.5,-0.25), point31(-0.5,-0.5,0.75), point31(-0.5,0.5,0.25), point31(-0.5,0.5,-0.75), },
|
|
||||||
{ point31(0.5,-0.5,-0.5), point31(0.5,-0.5,0.5), point31(-0.5,-0.5,0.5), point31(-0.5,-0.5,-0.5), },
|
|
||||||
{ point31(0,0,-0.5), point31(-0.5,0.5,-0.75), point31(-0.5,-0.5,-0.25), point31(0,0,-0.5), point31(-0.5,-0.5,-0.25), point31(-0.5,-0.5,-0.5), point31(0,0,-0.5), point31(-0.5,-0.5,-0.5), point31(0.5,-0.5,-0.5), point31(0,0,-0.5), point31(0.5,-0.5,-0.5), point31(0.5,-0.5,-0.75), point31(0,0,-0.5), point31(0.5,-0.5,-0.75), point31(0.5,0.5,-0.25), point31(0,0,-0.5), point31(0.5,0.5,-0.25), point31(0.5,0.5,-0.5), point31(0,0,-0.5), point31(0.5,0.5,-0.5), point31(-0.5,0.5,-0.5), point31(0,0,-0.5), point31(-0.5,0.5,-0.5), point31(-0.5,0.5,-0.75), },
|
|
||||||
{ point31(0.5,0.5,-0.25), point31(0.5,0.5,0.75), point31(0.5,-0.5,0.25), point31(0.5,-0.5,-0.75), },
|
|
||||||
{ point31(-0.5,0.5,-0.5), point31(-0.5,0.5,0.5), point31(0.5,0.5,0.5), point31(0.5,0.5,-0.5), },
|
|
||||||
{ point31(0,0,0.5), point31(-0.5,0.5,0.25), point31(-0.5,-0.5,0.75), point31(0,0,0.5), point31(-0.5,-0.5,0.75), point31(-0.5,-0.5,0.5), point31(0,0,0.5), point31(-0.5,-0.5,0.5), point31(0.5,-0.5,0.5), point31(0,0,0.5), point31(0.5,-0.5,0.5), point31(0.5,-0.5,0.25), point31(0,0,0.5), point31(0.5,-0.5,0.25), point31(0.5,0.5,0.75), point31(0,0,0.5), point31(0.5,0.5,0.75), point31(0.5,0.5,0.5), point31(0,0,0.5), point31(0.5,0.5,0.5), point31(-0.5,0.5,0.5), point31(0,0,0.5), point31(-0.5,0.5,0.5), point31(-0.5,0.5,0.25), },
|
|
||||||
}};
|
|
||||||
|
|
||||||
EX array<int,3> nilperiod, nilperiod_edit;
|
EX array<int,3> nilperiod, nilperiod_edit;
|
||||||
|
int S7_edit;
|
||||||
|
|
||||||
EX transmatrix adjmatrix(int i) {
|
EX transmatrix adjmatrix(int i) {
|
||||||
return nisot::translate(mvec_to_point(movevectors[i]));
|
return nisot::translate(mvec_to_point(current_ns().movevectors[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct hrmap_nil : hrmap {
|
struct hrmap_nil : hrmap {
|
||||||
@ -835,10 +843,10 @@ EX namespace nilv {
|
|||||||
|
|
||||||
heptagon *create_step(heptagon *parent, int d) override {
|
heptagon *create_step(heptagon *parent, int d) override {
|
||||||
auto p = coords[parent];
|
auto p = coords[parent];
|
||||||
auto q = p * movevectors[d];
|
auto q = p * current_ns().movevectors[d];
|
||||||
for(int a=0; a<3; a++) q[a] = zgmod(q[a], nilperiod[a]);
|
for(int a=0; a<3; a++) q[a] = zgmod(q[a], nilperiod[a]);
|
||||||
auto child = get_at(q);
|
auto child = get_at(q);
|
||||||
parent->c.connect(d, child, (d + nilv_S7/2) % nilv_S7, false);
|
parent->c.connect(d, child, (d + S7/2) % S7, false);
|
||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -921,6 +929,7 @@ EX color_t colorize(cell *c, char whichCanvas) {
|
|||||||
|
|
||||||
EX void prepare_niltorus3() {
|
EX void prepare_niltorus3() {
|
||||||
nilperiod_edit = nilperiod;
|
nilperiod_edit = nilperiod;
|
||||||
|
S7_edit = ginf[gNil].sides;
|
||||||
}
|
}
|
||||||
|
|
||||||
EX void show_niltorus3() {
|
EX void show_niltorus3() {
|
||||||
@ -937,6 +946,8 @@ EX void show_niltorus3() {
|
|||||||
dialog::bound_low(0);
|
dialog::bound_low(0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
dialog::addSelItem(XLAT("honeycomb"), its(S7_edit), 'h');
|
||||||
|
dialog::add_action([] { S7_edit = S7_edit ^ 6 ^ 8; });
|
||||||
|
|
||||||
bool ok = (!nilperiod_edit[1]) || (nilperiod_edit[2] && nilperiod_edit[1] % nilperiod_edit[2] == 0);
|
bool ok = (!nilperiod_edit[1]) || (nilperiod_edit[2] && nilperiod_edit[1] % nilperiod_edit[2] == 0);
|
||||||
|
|
||||||
@ -947,6 +958,7 @@ EX void show_niltorus3() {
|
|||||||
dialog::add_action([] {
|
dialog::add_action([] {
|
||||||
stop_game();
|
stop_game();
|
||||||
nilperiod = nilperiod_edit;
|
nilperiod = nilperiod_edit;
|
||||||
|
ginf[gNil].sides = S7_edit;
|
||||||
set_flags();
|
set_flags();
|
||||||
geometry = gNil;
|
geometry = gNil;
|
||||||
start_game();
|
start_game();
|
||||||
@ -1913,6 +1925,13 @@ EX namespace nisot {
|
|||||||
nilv::set_flags();
|
nilv::set_flags();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
else if(argis("-nilv")) {
|
||||||
|
PHASEFROM(2);
|
||||||
|
if(nil) stop_game();
|
||||||
|
shift();
|
||||||
|
ginf[gNil].sides = argi();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
else if(argis("-catperiod")) {
|
else if(argis("-catperiod")) {
|
||||||
PHASEFROM(2);
|
PHASEFROM(2);
|
||||||
if(sol) stop_game();
|
if(sol) stop_game();
|
||||||
|
@ -1078,7 +1078,7 @@ void geometry_information::create_wall3d() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(geometry == gNil) {
|
if(geometry == gNil) {
|
||||||
for(int i=0; i<S7; i++) make_wall(i, nilv::facevertices[i]);
|
for(int i=0; i<S7; i++) make_wall(i, nilv::current_ns().facevertices[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(penrose) {
|
if(penrose) {
|
||||||
|
@ -64,6 +64,8 @@ EX bool available() {
|
|||||||
if(WDIM == 2) return false;
|
if(WDIM == 2) return false;
|
||||||
if(hyperbolic && pmodel == mdPerspective && !penrose)
|
if(hyperbolic && pmodel == mdPerspective && !penrose)
|
||||||
return true;
|
return true;
|
||||||
|
if(nil && S7 == 8)
|
||||||
|
return false;
|
||||||
if((solnih || nil) && pmodel == mdGeodesic)
|
if((solnih || nil) && pmodel == mdGeodesic)
|
||||||
return true;
|
return true;
|
||||||
if(euclid && pmodel == mdPerspective && !binarytiling)
|
if(euclid && pmodel == mdPerspective && !binarytiling)
|
||||||
|
Loading…
Reference in New Issue
Block a user