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

Archimedean tilings on the list colored by type

This commit is contained in:
Zeno Rogue 2018-08-21 16:10:01 +02:00
parent da5ea5cc68
commit e1a52053b7

View File

@ -11,6 +11,8 @@ static const int sfTHREE = 8;
struct archimedean_tiling { struct archimedean_tiling {
int coloring;
string symbol; string symbol;
vector<int> faces; vector<int> faces;
@ -758,73 +760,90 @@ int threecolor(int id) {
} }
} }
vector<string> samples = { int cEucRegular = 0x008000;
int cEucSemiregular = 0x40C040;
int cPlatonic = 0x000080;
int cArchimedean = 0x4040C0;
int cPrism = 0x40A0A0;
int cAntiPrism = 0x80A0A0;
int cHyperRegular = 0x800000;
int cHyperSemi = 0xC04040;
int cWeird = 0xA000A0;
vector<pair<string, int> > samples = {
/* Euclidean */ /* Euclidean */
"(3,3,3,3,3,3)", {"(3,3,3,3,3,3)", cEucRegular},
"(4,4,4,4)", {"(4,4,4,4)", cEucRegular},
"(6,6,6)", {"(6,6,6)", cEucRegular},
"(8,8,4)", {"(8,8,4)", cEucSemiregular},
"(4,6,12)", {"(4,6,12)", cEucSemiregular},
"(6,4,3,4)", {"(6,4,3,4)", cEucSemiregular},
"(3,6,3,6)", {"(3,6,3,6)", cEucSemiregular},
"(3,12,12)", {"(3,12,12)", cEucSemiregular},
"(4,4,3L,3L,3L)[3,4]", {"(4,4,3L,3L,3L)[3,4]", cEucSemiregular},
"(3,3,3,3,6)(1,2)(0,4)(3)", {"(3,3,3,3,6)(1,2)(0,4)(3)", cEucSemiregular},
"(3,3,4,3,4)(0,4)(1)(2,3)", {"(3,3,4,3,4)(0,4)(1)(2,3)", cEucSemiregular},
/* Platonic */ /* Platonic */
"(3,3,3)", {"(3,3,3)", cPlatonic},
"(3,3,3,3)", {"(3,3,3,3)", cPlatonic},
"(3,3,3,3,3)", {"(3,3,3,3,3)", cPlatonic},
"(4,4,4)", {"(4,4,4)", cPlatonic},
"(5,5,5)", {"(5,5,5)", cPlatonic},
/* Archimedean solids */ /* Archimedean solids */
"(3,6,6)", {"(3,6,6)", cArchimedean},
"(3,4,3,4)", {"(3,4,3,4)", cArchimedean},
"(3,8,8)", {"(3,8,8)", cArchimedean},
"(4,6,6)", {"(4,6,6)", cArchimedean},
"(3,4,4,4)", {"(3,4,4,4)", cArchimedean},
"(4,6,8)", {"(4,6,8)", cArchimedean},
"(3,3,3,3,4)(1,2)(0,4)(3)", {"(3,3,3,3,4)(1,2)(0,4)(3)", cArchimedean},
"(3,5,3,5)", {"(3,5,3,5)", cArchimedean},
"(3,10,10)", {"(3,10,10)", cArchimedean},
"(5,6,6)", {"(5,6,6)", cArchimedean},
"(3,4,5,4)", {"(3,4,5,4)", cArchimedean},
"(4,6,10)", {"(4,6,10)", cArchimedean},
"(3,3,3,3,5)(1,2)(0,4)(3)", {"(3,3,3,3,5)(1,2)(0,4)(3)", cArchimedean},
/* prisms */ /* prisms */
"(3,4,4)", {"(3,4,4)", cPrism},
"(5,4,4)", {"(5,4,4)", cPrism},
"(6,4,4)", {"(6,4,4)", cPrism},
"(7,4,4)", {"(7,4,4)", cPrism},
/* sample antiprisms */ /* sample antiprisms */
"(3,3,3,4)(1)(2)", {"(3,3,3,4)(1)(2)", cAntiPrism},
"(3,3,3,5)(1)(2)", {"(3,3,3,5)(1)(2)", cAntiPrism},
"(3,3,3,6)(1)(2)", {"(3,3,3,6)(1)(2)", cAntiPrism},
"(3,3,3,7)(1)(2)", {"(3,3,3,7)(1)(2)", cAntiPrism},
/* hyperbolic ones */ /* hyperbolic ones */
"(4,4,4,4,4)", {"(4,4,4,4,4)", cHyperRegular},
"(5,5,5,5)", {"(5,5,5,5)", cHyperRegular},
"(3,3,3,3,7)(1,2)(0,4)(3)", {"(7,7,7)", cHyperRegular},
"(3HL,6,6,6)(1,0)[2](3)", {"(8,8,8)", cHyperRegular},
"(3,4,4,4,4)", {"(7,6,6)", cHyperSemi},
"(3,4,4,4,4) (0 1)[2 3](4)", {"(3,3,3,3,7)(1,2)(0,4)(3)", cHyperSemi},
"(3,4,4,4,4) (0 1)(2)(3)(4)", {"(3HL,6,6,6)(1,0)[2](3)", cHyperSemi},
"(6,6,3,3,3) (0 2)(1)(3)(4)", {"(3,4,4,4,4)", cHyperSemi},
"(5,3,5,3,3) (0 1)(2 3)(4)", {"(3,4,4,4,4) (0 1)[2 3](4)", cHyperSemi},
"(4,3,3,3,3,3) (0 1)(2 3)(4 5)", {"(3,4,4,4,4) (0 1)(2)(3)(4)", cHyperSemi},
"(3,5,5,5,5,5) (0 1)[2 3](4)(5)", {"(6,6,3,3,3) (0 2)(1)(3)(4)", cHyperSemi},
"(3,5,5,5,5,5) (0 1)(2 4)(3 5)", {"(5,3,5,3,3) (0 1)(2 3)(4)", cHyperSemi},
"(3,5,5,5,5,5) (0 1)(2 4)[3 5]", {"(4,3,3,3,3,3) (0 1)(2 3)(4 5)", cHyperSemi},
"(3,5,5,5,5,5) (0 1)[2 4](3)(5)", {"(3,5,5,5,5,5) (0 1)[2 3](4)(5)", cHyperSemi},
"(3,5,5,5,5,5) (0 1)(2)(3)(4)(5)", {"(3,5,5,5,5,5) (0 1)(2 4)(3 5)", cHyperSemi},
{"(3,5,5,5,5,5) (0 1)(2 4)[3 5]", cHyperSemi},
{"(3,5,5,5,5,5) (0 1)[2 4](3)(5)", cHyperSemi},
{"(3,5,5,5,5,5) (0 1)(2)(3)(4)(5)", cHyperSemi},
/* with digons */ /* with digons */
"2,3,3,3,3,3 (2,3) (4,5)" {"(2,3,3,3,3,3) (2,3) (4,5)", cWeird},
{"(6,6)", cWeird},
{"(2,2)", cWeird},
{"(2,2,2,2,2,2)", cWeird}
}; };
int lastsample = 0; int lastsample = 0;
@ -856,19 +875,22 @@ void enable(archimedean_tiling& arct) {
void show() { void show() {
if(lastsample < isize(samples)) { if(lastsample < isize(samples)) {
string s = samples[lastsample++]; string s = samples[lastsample].first;
int col = samples[lastsample].second;
lastsample++;
archimedean_tiling tested; archimedean_tiling tested;
tested.parse(s); tested.parse(s);
if(tested.errors) { if(tested.errors) {
printf("WARNING: %d errors on %s '%s'\n", tested.errors, s.c_str(), tested.errormsg.c_str()); printf("WARNING: %d errors on %s '%s'\n", tested.errors, s.c_str(), tested.errormsg.c_str());
} }
else { else {
tested.coloring = col;
tilings.push_back(move(tested)); tilings.push_back(move(tested));
sort(tilings.begin(), tilings.end(), [] (archimedean_tiling& s1, archimedean_tiling& s2) { /* sort(tilings.begin(), tilings.end(), [] (archimedean_tiling& s1, archimedean_tiling& s2) {
if(s1.euclidean_angle_sum < s2.euclidean_angle_sum - 1e-6) return true; if(s1.euclidean_angle_sum < s2.euclidean_angle_sum - 1e-6) return true;
if(s2.euclidean_angle_sum < s1.euclidean_angle_sum - 1e-6) return false; if(s2.euclidean_angle_sum < s1.euclidean_angle_sum - 1e-6) return false;
return s1.symbol < s2.symbol; return s1.symbol < s2.symbol;
}); }); */
} }
} }
cmode = sm::SIDE | sm::MAYDARK; cmode = sm::SIDE | sm::MAYDARK;
@ -921,6 +943,7 @@ void show() {
if(texture::config.tstate == texture::tsActive && texture::cgroup == cpChess && !ps.support_chessboard()) if(texture::config.tstate == texture::tsActive && texture::cgroup == cpChess && !ps.support_chessboard())
continue; continue;
dialog::addSelItem(ps.symbol, fts(ps.euclidean_angle_sum * 180) + "°", 'a' + shown); dialog::addSelItem(ps.symbol, fts(ps.euclidean_angle_sum * 180) + "°", 'a' + shown);
dialog::lastItem().color = ps.coloring;
dialog::add_action([&] () { enable(ps); }); dialog::add_action([&] () { enable(ps); });
shown++; shown++;
} }