mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-12-24 09:00:34 +00:00
more intuitive tiling selection
This commit is contained in:
parent
165a55d93c
commit
d5a99e67e0
@ -512,8 +512,8 @@ static const flagtype qsZEBRA = qANYQ | qSMALL | qBOUNDED | qZEBRA;
|
||||
static const flagtype qsFIELD = qANYQ | qFIELD | qBOUNDED;
|
||||
static const flagtype qsDOCKS = qANYQ | qSMALL | qBOUNDED | qDOCKS;
|
||||
static const flagtype qsSMALLB = qSMALL | qBOUNDED;
|
||||
static const flagtype qsSMALLBF = qsSMALLB | qsFIELD;
|
||||
static const flagtype qsSMALLBE = qsSMALLB | qELLIPTIC;
|
||||
static const flagtype qsSMALLBF = qsSMALLB | qsFIELD | qANYQ;
|
||||
static const flagtype qsSMALLBE = qsSMALLB | qELLIPTIC | qANYQ;
|
||||
static const flagtype qsBP = qBINARY | qPENROSE;
|
||||
|
||||
EX geometryinfo1 giEuclid2 = { gcEuclid, 2, 2, 3, {1,1, 0,0 } };
|
||||
@ -526,7 +526,7 @@ EX geometryinfo1 giSphere3 = { gcSphere, 3, 3, 4, {1,1, 1,+1} };
|
||||
|
||||
EX geometryinfo1 giSol = { gcSol, 3, 3, 4, {1,1, 1,0 } };
|
||||
EX geometryinfo1 giNil = { gcNil, 3, 3, 4, {1,1, 1,0 } };
|
||||
EX geometryinfo1 giProduct = { /* will be filled in product::configure() */ };
|
||||
EX geometryinfo1 giProduct = { gcSL2, 3, 3, 4, {1,1, 1,0 } /* will be filled in product::configure() */ };
|
||||
EX geometryinfo1 giSL2 = { gcSL2, 3, 3, 4, {1,1,-1,-1} };
|
||||
|
||||
/** list of available geometries */
|
||||
|
29
geom-exp.cpp
29
geom-exp.cpp
@ -402,7 +402,9 @@ vector<eGeometry> list3d = {
|
||||
gCell5, gKiteDart3, gSol, gNil, gProduct, gRotSpace
|
||||
};
|
||||
|
||||
void ge_select_tiling(const vector<eGeometry>& lst) {
|
||||
bool select_dims, select_quotient;
|
||||
|
||||
void ge_select_tiling() {
|
||||
cmode = sm::SIDE | sm::MAYDARK;
|
||||
gamescreen(0);
|
||||
|
||||
@ -412,15 +414,20 @@ void ge_select_tiling(const vector<eGeometry>& lst) {
|
||||
dialog::addInfo("3D geometries are a work in progress", 0x800000); */
|
||||
|
||||
char letter = 'a';
|
||||
for(eGeometry i: lst) {
|
||||
bool on = geometry == i;
|
||||
dynamicval<eGeometry> cg(geometry, eGeometry(i));
|
||||
for(int i=0; i<isize(ginf); i++) {
|
||||
eGeometry g = eGeometry(i);
|
||||
if(among(g, gProduct, gRotSpace)) hybrid::configure(g);
|
||||
bool on = geometry == g;
|
||||
bool in_2d = WDIM == 2;
|
||||
dynamicval<eGeometry> cg(geometry, g);
|
||||
if(archimedean && !CAP_ARCM) continue;
|
||||
if(cryst && !CAP_CRYSTAL) continue;
|
||||
if(geometry == gFieldQuotient && !CAP_FIELD) continue;
|
||||
if((!!quotient) ^ select_quotient) continue;
|
||||
if((WDIM == 3) ^ select_dims) continue;
|
||||
dialog::addBoolItem(XLAT(
|
||||
(geometry == gProduct && !hybri) ? XLAT("current geometry x E") :
|
||||
(geometry == gRotSpace && !hybri) ? XLAT("space of rotations in current geometry") :
|
||||
(geometry == gProduct && in_2d) ? XLAT("current geometry x E") :
|
||||
(geometry == gRotSpace && in_2d) ? XLAT("space of rotations in current geometry") :
|
||||
ginf[i].menu_displayed_name), on, letter++);
|
||||
dialog::lastItem().value += validclasses[land_validity(specialland).quality_level];
|
||||
dialog::add_action(dual::mayboth([i] {
|
||||
@ -472,6 +479,10 @@ void ge_select_tiling(const vector<eGeometry>& lst) {
|
||||
}));
|
||||
}
|
||||
|
||||
dialog::addBreak(100);
|
||||
dialog::addBoolItem_action(XLAT("show quotient spaces"), select_quotient, 'Q');
|
||||
dialog::addBoolItem_action(XLAT("three-dimensional"), select_dims, 'D');
|
||||
|
||||
dual::add_choice();
|
||||
dialog::addBack();
|
||||
dialog::display();
|
||||
@ -507,7 +518,7 @@ EX void showEuclideanMenu() {
|
||||
dialog::init(XLAT("experiment with geometry"));
|
||||
|
||||
dialog::addSelItem(XLAT("basic tiling"), XLAT(ginf[geometry].tiling_name), 't');
|
||||
dialog::add_action_push([] { ge_select_tiling(tilinglist); });
|
||||
dialog::add_action([] { select_quotient = quotient; select_dims = WDIM == 3; pushScreen(ge_select_tiling); });
|
||||
|
||||
int ts = ginf[geometry].sides;
|
||||
int tv = ginf[geometry].vertex;
|
||||
@ -636,11 +647,11 @@ EX void showEuclideanMenu() {
|
||||
else
|
||||
dialog::addSelItem(XLAT("quotient space"), XLAT(qstring), 'q');
|
||||
|
||||
dialog::add_action_push([] { ge_select_tiling(quotientlist); });
|
||||
dialog::add_action([] { select_quotient = !quotient; select_dims = WDIM == 3; pushScreen(ge_select_tiling); });
|
||||
|
||||
#if MAXMDIM >= 4
|
||||
dialog::addSelItem(XLAT("dimension"), its(WDIM), 'd');
|
||||
dialog::add_action_push([] { ge_select_tiling(list3d); });
|
||||
dialog::add_action([] { select_quotient = quotient; select_dims = WDIM != 3; pushScreen(ge_select_tiling); });
|
||||
#endif
|
||||
|
||||
#if CAP_IRR
|
||||
|
@ -573,13 +573,12 @@ EX namespace hybrid {
|
||||
EX geometry_information *underlying_cgip;
|
||||
|
||||
EX void configure(eGeometry g) {
|
||||
if(vid.always3) { vid.always3 = false; geom3::apply_always3(); }
|
||||
if(WDIM == 3) return;
|
||||
check_cgi();
|
||||
cgi.prepare_basics();
|
||||
cgi.require_basics();
|
||||
underlying = geometry;
|
||||
underlying_cgip = cgip;
|
||||
bool sph = sphere;
|
||||
geometry = g;
|
||||
auto keep = ginf[g].menu_displayed_name;
|
||||
ginf[g] = ginf[underlying];
|
||||
ginf[g].menu_displayed_name = keep;
|
||||
|
@ -1179,7 +1179,10 @@ EX void set_geometry(eGeometry target) {
|
||||
int old_DIM = GDIM;
|
||||
stop_game();
|
||||
ors::reset();
|
||||
if(among(target, gProduct, gRotSpace)) hybrid::configure(target);
|
||||
if(among(target, gProduct, gRotSpace)) {
|
||||
if(vid.always3) { vid.always3 = false; geom3::apply_always3(); }
|
||||
hybrid::configure(target);
|
||||
}
|
||||
geometry = target;
|
||||
|
||||
if(chaosmode && bounded) chaosmode = false;
|
||||
|
Loading…
Reference in New Issue
Block a user