mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-02-02 20:29:17 +00:00
renamed 'syntetic' to 'archimedean' (enums/files/marcos/namespaces)
This commit is contained in:
parent
1c8f0e7e37
commit
4d31e5a544
@ -1,6 +1,6 @@
|
|||||||
namespace hr {
|
namespace hr {
|
||||||
|
|
||||||
namespace synt {
|
namespace arcm {
|
||||||
|
|
||||||
#define SDEBUG(x) if(debug_geometry) { doindent(); x; fflush(stdout); }
|
#define SDEBUG(x) if(debug_geometry) { doindent(); x; fflush(stdout); }
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ vector<vector<pair<int, int>>> adjacent;
|
|||||||
|
|
||||||
vector<vector<pair<ld, ld>>> triangles;
|
vector<vector<pair<ld, ld>>> triangles;
|
||||||
|
|
||||||
// id of vertex in the syntetic tiling
|
// id of vertex in the archimedean tiling
|
||||||
// odd numbers = reflected tiles
|
// odd numbers = reflected tiles
|
||||||
// 0, 2, ..., 2(N-1) = as in the symbol
|
// 0, 2, ..., 2(N-1) = as in the symbol
|
||||||
// 2N = bitruncated tile
|
// 2N = bitruncated tile
|
||||||
@ -244,13 +244,13 @@ void prepare() {
|
|||||||
|
|
||||||
euclidean_angle_sum = 0;
|
euclidean_angle_sum = 0;
|
||||||
for(int f: faces) euclidean_angle_sum += (f-2.) / f;
|
for(int f: faces) euclidean_angle_sum += (f-2.) / f;
|
||||||
if(euclidean_angle_sum < 1.999999) ginf[gSyntetic].cclass = gcSphere;
|
if(euclidean_angle_sum < 1.999999) ginf[gArchimedean].cclass = gcSphere;
|
||||||
else if(euclidean_angle_sum > 2.000001) ginf[gSyntetic].cclass = gcHyperbolic;
|
else if(euclidean_angle_sum > 2.000001) ginf[gArchimedean].cclass = gcHyperbolic;
|
||||||
else ginf[gSyntetic].cclass = gcEuclid;
|
else ginf[gArchimedean].cclass = gcEuclid;
|
||||||
|
|
||||||
SDEBUG( printf("euclidean_angle_sum = %lf\n", double(euclidean_angle_sum)); )
|
SDEBUG( printf("euclidean_angle_sum = %lf\n", double(euclidean_angle_sum)); )
|
||||||
|
|
||||||
dynamicval<eGeometry> dv(geometry, gSyntetic);
|
dynamicval<eGeometry> dv(geometry, gArchimedean);
|
||||||
|
|
||||||
/* compute the geometry */
|
/* compute the geometry */
|
||||||
inradius.resize(N);
|
inradius.resize(N);
|
||||||
@ -315,15 +315,15 @@ void prepare() {
|
|||||||
|
|
||||||
map<heptagon*, vector<pair<heptagon*, transmatrix> > > altmap;
|
map<heptagon*, vector<pair<heptagon*, transmatrix> > > altmap;
|
||||||
|
|
||||||
map<heptagon*, pair<heptagon*, transmatrix>> syntetic_gmatrix;
|
map<heptagon*, pair<heptagon*, transmatrix>> archimedean_gmatrix;
|
||||||
|
|
||||||
hrmap *current_altmap;
|
hrmap *current_altmap;
|
||||||
|
|
||||||
struct hrmap_syntetic : hrmap {
|
struct hrmap_archimedean : hrmap {
|
||||||
heptagon *origin;
|
heptagon *origin;
|
||||||
heptagon *getOrigin() { return origin; }
|
heptagon *getOrigin() { return origin; }
|
||||||
|
|
||||||
hrmap_syntetic() {
|
hrmap_archimedean() {
|
||||||
origin = new heptagon;
|
origin = new heptagon;
|
||||||
origin->s = hsOrigin;
|
origin->s = hsOrigin;
|
||||||
origin->emeraldval = 0;
|
origin->emeraldval = 0;
|
||||||
@ -357,7 +357,7 @@ struct hrmap_syntetic : hrmap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
transmatrix T = xpush(.01241) * spin(1.4117) * xpush(0.1241) * Id;
|
transmatrix T = xpush(.01241) * spin(1.4117) * xpush(0.1241) * Id;
|
||||||
syntetic_gmatrix[origin] = make_pair(alt, T);
|
archimedean_gmatrix[origin] = make_pair(alt, T);
|
||||||
altmap[alt].emplace_back(origin, T);
|
altmap[alt].emplace_back(origin, T);
|
||||||
|
|
||||||
base_distlimit = 0;
|
base_distlimit = 0;
|
||||||
@ -366,10 +366,10 @@ struct hrmap_syntetic : hrmap {
|
|||||||
if(sphere) base_distlimit = 15;
|
if(sphere) base_distlimit = 15;
|
||||||
}
|
}
|
||||||
|
|
||||||
~hrmap_syntetic() {
|
~hrmap_archimedean() {
|
||||||
clearfrom(origin);
|
clearfrom(origin);
|
||||||
altmap.clear();
|
altmap.clear();
|
||||||
syntetic_gmatrix.clear();
|
archimedean_gmatrix.clear();
|
||||||
if(current_altmap) {
|
if(current_altmap) {
|
||||||
dynamicval<eGeometry> g(geometry, gNormal);
|
dynamicval<eGeometry> g(geometry, gNormal);
|
||||||
delete current_altmap;
|
delete current_altmap;
|
||||||
@ -379,7 +379,7 @@ struct hrmap_syntetic : hrmap {
|
|||||||
void verify() { }
|
void verify() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
hrmap *new_map() { return new hrmap_syntetic; }
|
hrmap *new_map() { return new hrmap_archimedean; }
|
||||||
|
|
||||||
transmatrix adjcell_matrix(heptagon *h, int d);
|
transmatrix adjcell_matrix(heptagon *h, int d);
|
||||||
|
|
||||||
@ -425,7 +425,7 @@ void create_adjacent(heptagon *h, int d) {
|
|||||||
|
|
||||||
// * spin(-tri[id][pi+i].first) * xpush(t.second) * pispin * spin(tri[id'][p'+d'].first)
|
// * spin(-tri[id][pi+i].first) * xpush(t.second) * pispin * spin(tri[id'][p'+d'].first)
|
||||||
|
|
||||||
auto& p = syntetic_gmatrix[h];
|
auto& p = archimedean_gmatrix[h];
|
||||||
|
|
||||||
heptagon *alt = p.first;
|
heptagon *alt = p.first;
|
||||||
|
|
||||||
@ -462,7 +462,7 @@ void create_adjacent(heptagon *h, int d) {
|
|||||||
|
|
||||||
heptagon *hnew = build_child(h, d, get_adj(h, d).first, get_adj(h, d).second);
|
heptagon *hnew = build_child(h, d, get_adj(h, d).first, get_adj(h, d).second);
|
||||||
altmap[alt].emplace_back(hnew, T1);
|
altmap[alt].emplace_back(hnew, T1);
|
||||||
syntetic_gmatrix[hnew] = make_pair(alt, T1);
|
archimedean_gmatrix[hnew] = make_pair(alt, T1);
|
||||||
}
|
}
|
||||||
|
|
||||||
set<heptagon*> visited;
|
set<heptagon*> visited;
|
||||||
@ -601,7 +601,7 @@ int readArgs() {
|
|||||||
|
|
||||||
if(0) ;
|
if(0) ;
|
||||||
else if(argis("-symbol")) {
|
else if(argis("-symbol")) {
|
||||||
targetgeometry = gSyntetic;
|
targetgeometry = gArchimedean;
|
||||||
if(targetgeometry != geometry)
|
if(targetgeometry != geometry)
|
||||||
stop_game_and_switch_mode(rg::geometry);
|
stop_game_and_switch_mode(rg::geometry);
|
||||||
showstartmenu = false;
|
showstartmenu = false;
|
||||||
@ -631,8 +631,8 @@ int support_threecolor() {
|
|||||||
int support_graveyard() {
|
int support_graveyard() {
|
||||||
if(!nonbitrunc) return 2;
|
if(!nonbitrunc) return 2;
|
||||||
return
|
return
|
||||||
isize(synt::faces) == 3 && synt::faces[0] % 2 == 0 ? 2 :
|
isize(arcm::faces) == 3 && arcm::faces[0] % 2 == 0 ? 2 :
|
||||||
synt::have_ph ? 1 :
|
arcm::have_ph ? 1 :
|
||||||
0;
|
0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -641,15 +641,15 @@ bool support_chessboard() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool pseudohept(int id) {
|
bool pseudohept(int id) {
|
||||||
return flags[id] & synt::sfPH;
|
return flags[id] & arcm::sfPH;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool chessvalue(cell *c) {
|
bool chessvalue(cell *c) {
|
||||||
return flags[id_of(c->master)] & synt::sfCHESS;
|
return flags[id_of(c->master)] & arcm::sfCHESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool linespattern(cell *c) {
|
bool linespattern(cell *c) {
|
||||||
return flags[id_of(c->master)] & synt::sfLINE;
|
return flags[id_of(c->master)] & arcm::sfLINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int threecolor(int id) {
|
int threecolor(int id) {
|
||||||
@ -745,8 +745,16 @@ string active_symbol;
|
|||||||
|
|
||||||
bool manual_edit;
|
bool manual_edit;
|
||||||
|
|
||||||
|
void enable() {
|
||||||
|
stop_game();
|
||||||
|
if(geometry != gArchimedean) targetgeometry = gArchimedean, stop_game_and_switch_mode(rg::geometry);
|
||||||
|
nonbitrunc = true; need_reset_geometry = true;
|
||||||
|
parse_symbol(current_symbol);
|
||||||
|
start_game();
|
||||||
|
}
|
||||||
|
|
||||||
void show() {
|
void show() {
|
||||||
if(lastsample < isize(samples) && geometry != gSyntetic) {
|
if(lastsample < isize(samples) && geometry != gArchimedean) {
|
||||||
string s = samples[lastsample++];
|
string s = samples[lastsample++];
|
||||||
parse_symbol(s);
|
parse_symbol(s);
|
||||||
if(errors) {
|
if(errors) {
|
||||||
@ -782,11 +790,8 @@ void show() {
|
|||||||
parse_symbol(current_symbol);
|
parse_symbol(current_symbol);
|
||||||
if(errors) parse_symbol(current_symbol = active_symbol);
|
if(errors) parse_symbol(current_symbol = active_symbol);
|
||||||
else {
|
else {
|
||||||
stop_game();
|
parse_symbol(active_symbol);
|
||||||
need_reset_geometry = true;
|
enable();
|
||||||
if(geometry != gSyntetic) targetgeometry = gSyntetic, stop_game_and_switch_mode(rg::geometry);
|
|
||||||
nonbitrunc = true; need_reset_geometry = true;
|
|
||||||
start_game();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -798,12 +803,8 @@ void show() {
|
|||||||
auto &ps = prepsamples[j];
|
auto &ps = prepsamples[j];
|
||||||
dialog::addSelItem(ps.s, fts(ps.angle_sum) + "°", 'a' + i);
|
dialog::addSelItem(ps.s, fts(ps.angle_sum) + "°", 'a' + i);
|
||||||
dialog::add_action([&] () {
|
dialog::add_action([&] () {
|
||||||
stop_game();
|
|
||||||
current_symbol = ps.s;
|
current_symbol = ps.s;
|
||||||
if(geometry != gSyntetic) targetgeometry = gSyntetic, stop_game_and_switch_mode(rg::geometry);
|
enable();
|
||||||
nonbitrunc = true; need_reset_geometry = true;
|
|
||||||
parse_symbol(current_symbol);
|
|
||||||
start_game();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
dialog::addItem(XLAT("next page"), '-');
|
dialog::addItem(XLAT("next page"), '-');
|
@ -976,7 +976,7 @@ int wallchance(cell *c, bool deepOcean) {
|
|||||||
|
|
||||||
bool horo_ok() {
|
bool horo_ok() {
|
||||||
// do the horocycles work in the current geometry?
|
// do the horocycles work in the current geometry?
|
||||||
return hyperbolic && !binarytiling && !syntetic;
|
return hyperbolic && !binarytiling && !archimedean;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool gp_wall_test() {
|
bool gp_wall_test() {
|
||||||
|
16
cell.cpp
16
cell.cpp
@ -798,14 +798,14 @@ cell *createMov(cell *c, int d) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(nonbitrunc && syntetic) {
|
else if(nonbitrunc && archimedean) {
|
||||||
if(synt::id_of(c->master) <= synt::N * 2) {
|
if(arcm::id_of(c->master) <= arcm::N * 2) {
|
||||||
heptspin hs = heptspin(c->master, d) + wstep + 2 + wstep + 1;
|
heptspin hs = heptspin(c->master, d) + wstep + 2 + wstep + 1;
|
||||||
c->c.connect(d, hs.at->c7, hs.spin, hs.mirrored);
|
c->c.connect(d, hs.at->c7, hs.spin, hs.mirrored);
|
||||||
}
|
}
|
||||||
else c->c.connect(d, c, d, false);
|
else c->c.connect(d, c, d, false);
|
||||||
}
|
}
|
||||||
else if(nonbitrunc || syntetic) {
|
else if(nonbitrunc || archimedean) {
|
||||||
heptagon *h2 = createStep(c->master, d);
|
heptagon *h2 = createStep(c->master, d);
|
||||||
c->c.connect(d, h2->c7,c->master->c.spin(d),false);
|
c->c.connect(d, h2->c7,c->master->c.spin(d),false);
|
||||||
}
|
}
|
||||||
@ -874,7 +874,7 @@ cell*& euclideanAtCreate(int vec) {
|
|||||||
void initcells() {
|
void initcells() {
|
||||||
DEBB(DF_INIT, (debugfile,"initcells\n"));
|
DEBB(DF_INIT, (debugfile,"initcells\n"));
|
||||||
|
|
||||||
if(syntetic) currentmap = synt::new_map();
|
if(archimedean) currentmap = arcm::new_map();
|
||||||
else if(torus) currentmap = new hrmap_torus;
|
else if(torus) currentmap = new hrmap_torus;
|
||||||
else if(euclid) currentmap = new hrmap_euclidean;
|
else if(euclid) currentmap = new hrmap_euclidean;
|
||||||
else if(sphere) currentmap = new hrmap_spherical;
|
else if(sphere) currentmap = new hrmap_spherical;
|
||||||
@ -913,7 +913,7 @@ template<class T> void subcell(cell *c, const T& t) {
|
|||||||
subcell(c2, t);
|
subcell(c2, t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(!nonbitrunc && !syntetic && !binarytiling)
|
else if(!nonbitrunc && !archimedean && !binarytiling)
|
||||||
forCellEx(c2, c) t(c2);
|
forCellEx(c2, c) t(c2);
|
||||||
t(c);
|
t(c);
|
||||||
}
|
}
|
||||||
@ -992,7 +992,7 @@ void verifycell(cell *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void verifycells(heptagon *at) {
|
void verifycells(heptagon *at) {
|
||||||
if(gp::on || irr::on || syntetic) return;
|
if(gp::on || irr::on || archimedean) return;
|
||||||
for(int i=0; i<S7; i++) if(at->move(i) && at->move(i)->move(at->c.spin(i)) && at->move(i)->move(at->c.spin(i)) != at) {
|
for(int i=0; i<S7; i++) if(at->move(i) && at->move(i)->move(at->c.spin(i)) && at->move(i)->move(at->c.spin(i)) != at) {
|
||||||
printf("hexmix error %p [%d s=%d] %p %p\n", at, i, at->c.spin(i), at->move(i), at->move(i)->move(at->c.spin(i)));
|
printf("hexmix error %p [%d s=%d] %p %p\n", at, i, at->c.spin(i), at->move(i), at->move(i)->move(at->c.spin(i)));
|
||||||
}
|
}
|
||||||
@ -1039,7 +1039,7 @@ int celldist(cell *c) {
|
|||||||
return eudist(decodeId(c->master));
|
return eudist(decodeId(c->master));
|
||||||
if(sphere) return celldistance(c, currentmap->gamestart());
|
if(sphere) return celldistance(c, currentmap->gamestart());
|
||||||
if(irr::on) return irr::celldist(c, false);
|
if(irr::on) return irr::celldist(c, false);
|
||||||
if(binarytiling || syntetic || ctof(c)) return c->master->distance;
|
if(binarytiling || archimedean || ctof(c)) return c->master->distance;
|
||||||
if(gp::on) return gp::compute_dist(c, celldist);
|
if(gp::on) return gp::compute_dist(c, celldist);
|
||||||
int dx[MAX_S3];
|
int dx[MAX_S3];
|
||||||
for(int u=0; u<S3; u++)
|
for(int u=0; u<S3; u++)
|
||||||
@ -1452,7 +1452,7 @@ int celldistance(cell *c1, cell *c2) {
|
|||||||
return 64;
|
return 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gp::on || masterless || irr::on || syntetic || binarytiling) {
|
if(gp::on || masterless || irr::on || archimedean || binarytiling) {
|
||||||
|
|
||||||
if(saved_distances.count(make_pair(c1,c2)))
|
if(saved_distances.count(make_pair(c1,c2)))
|
||||||
return saved_distances[make_pair(c1,c2)];
|
return saved_distances[make_pair(c1,c2)];
|
||||||
|
@ -198,7 +198,7 @@ enum eLand { laNone, laBarrier, laCrossroads, laDesert, laIce, laCaves, laJungle
|
|||||||
|
|
||||||
enum eGeometry {
|
enum eGeometry {
|
||||||
gNormal, gEuclid, gSphere, gElliptic, gZebraQuotient, gFieldQuotient, gTorus, gOctagon, g45, g46, g47, gSmallSphere, gTinySphere, gEuclidSquare, gSmallElliptic,
|
gNormal, gEuclid, gSphere, gElliptic, gZebraQuotient, gFieldQuotient, gTorus, gOctagon, g45, g46, g47, gSmallSphere, gTinySphere, gEuclidSquare, gSmallElliptic,
|
||||||
gKleinQuartic, gBolza, gBolza2, gMinimal, gBinaryTiling, gSyntetic,
|
gKleinQuartic, gBolza, gBolza2, gMinimal, gBinaryTiling, gArchimedean,
|
||||||
gGUARD};
|
gGUARD};
|
||||||
|
|
||||||
enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere };
|
enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere };
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
#include "fieldpattern.cpp"
|
#include "fieldpattern.cpp"
|
||||||
#include "heptagon.cpp"
|
#include "heptagon.cpp"
|
||||||
#include "binary-tiling.cpp"
|
#include "binary-tiling.cpp"
|
||||||
#include "syntetic.cpp"
|
#include "archimedean.cpp"
|
||||||
#include "language.cpp"
|
#include "language.cpp"
|
||||||
#include "cell.cpp"
|
#include "cell.cpp"
|
||||||
#include "goldberg.cpp"
|
#include "goldberg.cpp"
|
||||||
|
@ -336,8 +336,8 @@ void debugScreen() {
|
|||||||
dialog::addSelItem("temporary", its(mouseover->listindex), 0);
|
dialog::addSelItem("temporary", its(mouseover->listindex), 0);
|
||||||
if(gp::on)
|
if(gp::on)
|
||||||
dialog::addSelItem("whirl", gp::disp(gp::get_local_info(mouseover).relative), 0);
|
dialog::addSelItem("whirl", gp::disp(gp::get_local_info(mouseover).relative), 0);
|
||||||
if(syntetic)
|
if(archimedean)
|
||||||
dialog::addSelItem("ID", its(synt::id_of(mouseover->master)), 0);
|
dialog::addSelItem("ID", its(arcm::id_of(mouseover->master)), 0);
|
||||||
dialog::addBreak(50);
|
dialog::addBreak(50);
|
||||||
dialog::addSelItem("monster", dnameof2(mouseover->monst, mouseover->mondir), 0);
|
dialog::addSelItem("monster", dnameof2(mouseover->monst, mouseover->mondir), 0);
|
||||||
dialog::addSelItem("stuntime/hitpoints", its(mouseover->stuntime)+"/"+its(mouseover->hitpoints), 0);
|
dialog::addSelItem("stuntime/hitpoints", its(mouseover->stuntime)+"/"+its(mouseover->hitpoints), 0);
|
||||||
|
@ -281,7 +281,7 @@ void generate_floorshapes_for(int id, cell *c, int siid, int sidir) {
|
|||||||
for(auto pfsh: all_plain_floorshapes) {
|
for(auto pfsh: all_plain_floorshapes) {
|
||||||
auto& fsh = *pfsh;
|
auto& fsh = *pfsh;
|
||||||
|
|
||||||
if(!gp::on && !irr::on && !syntetic) {
|
if(!gp::on && !irr::on && !archimedean) {
|
||||||
|
|
||||||
// standard and binary
|
// standard and binary
|
||||||
ld hexside = fsh.rad0, heptside = fsh.rad1;
|
ld hexside = fsh.rad0, heptside = fsh.rad1;
|
||||||
@ -397,7 +397,7 @@ void generate_floorshapes_for(int id, cell *c, int siid, int sidir) {
|
|||||||
sizeto(fsh.b, id);
|
sizeto(fsh.b, id);
|
||||||
sizeto(fsh.shadow, id);
|
sizeto(fsh.shadow, id);
|
||||||
|
|
||||||
if(!gp::on && !irr::on && !binarytiling && !syntetic) {
|
if(!gp::on && !irr::on && !binarytiling && !archimedean) {
|
||||||
generate_matrices_scale(fsh.scale, fsh.noftype);
|
generate_matrices_scale(fsh.scale, fsh.noftype);
|
||||||
if(nonbitrunc && geosupport_graveyard() < 2 && fsh.shapeid2) {
|
if(nonbitrunc && geosupport_graveyard() < 2 && fsh.shapeid2) {
|
||||||
if(id == 0) bshape2(fsh.b[0], fsh.prio, fsh.shapeid2, hept_matrices);
|
if(id == 0) bshape2(fsh.b[0], fsh.prio, fsh.shapeid2, hept_matrices);
|
||||||
@ -481,16 +481,16 @@ void generate_floorshapes() {
|
|||||||
|
|
||||||
else if(gp::on) { /* will be generated on the fly */ }
|
else if(gp::on) { /* will be generated on the fly */ }
|
||||||
|
|
||||||
else if(syntetic) {
|
else if(archimedean) {
|
||||||
heptagon master;
|
heptagon master;
|
||||||
cell model;
|
cell model;
|
||||||
model.master = &master;
|
model.master = &master;
|
||||||
synt::parent_index_of(&master) = 0;
|
arcm::parent_index_of(&master) = 0;
|
||||||
for(int i=0; i<2*synt::N + (nonbitrunc ? 0 : 2); i++) {
|
for(int i=0; i<2*arcm::N + (nonbitrunc ? 0 : 2); i++) {
|
||||||
synt::id_of(&master) = i;
|
arcm::id_of(&master) = i;
|
||||||
model.type = isize(synt::triangles[i]);
|
model.type = isize(arcm::triangles[i]);
|
||||||
if(geosupport_graveyard() == 2)
|
if(geosupport_graveyard() == 2)
|
||||||
generate_floorshapes_for(i, &model, !synt::pseudohept(i), i/2);
|
generate_floorshapes_for(i, &model, !arcm::pseudohept(i), i/2);
|
||||||
else
|
else
|
||||||
generate_floorshapes_for(i, &model, 0, 0);
|
generate_floorshapes_for(i, &model, 0, 0);
|
||||||
}
|
}
|
||||||
@ -599,8 +599,8 @@ void draw_shapevec(cell *c, const transmatrix& V, const vector<hpcshape> &shv, i
|
|||||||
}
|
}
|
||||||
queuepolyat(V, shv[id], col, prio);
|
queuepolyat(V, shv[id], col, prio);
|
||||||
}
|
}
|
||||||
else if(syntetic) {
|
else if(archimedean) {
|
||||||
queuepolyat(V, shv[synt::id_of(c->master)], col, prio);
|
queuepolyat(V, shv[arcm::id_of(c->master)], col, prio);
|
||||||
}
|
}
|
||||||
else if((euclid || gp::on) && ishex1(c))
|
else if((euclid || gp::on) && ishex1(c))
|
||||||
queuepolyat(V * pispin, shv[0], col, prio);
|
queuepolyat(V * pispin, shv[0], col, prio);
|
||||||
|
14
geom-exp.cpp
14
geom-exp.cpp
@ -336,8 +336,8 @@ void showEuclideanMenu() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
dialog::addSelItem(XLAT("sides per face"), syntetic ? "?" : its(ts), 0);
|
dialog::addSelItem(XLAT("sides per face"), archimedean ? "?" : its(ts), 0);
|
||||||
dialog::addSelItem(XLAT("faces per vertex"), syntetic ? "?" : its(tv), 0);
|
dialog::addSelItem(XLAT("faces per vertex"), archimedean ? "?" : its(tv), 0);
|
||||||
|
|
||||||
string qstring = "none";
|
string qstring = "none";
|
||||||
if(tq & qZEBRA) qstring = "zebra";
|
if(tq & qZEBRA) qstring = "zebra";
|
||||||
@ -353,9 +353,9 @@ void showEuclideanMenu() {
|
|||||||
dialog::addSelItem(XLAT("quotient space"), XLAT(qstring), 0);
|
dialog::addSelItem(XLAT("quotient space"), XLAT(qstring), 0);
|
||||||
|
|
||||||
dialog::addSelItem(XLAT("size of the world"),
|
dialog::addSelItem(XLAT("size of the world"),
|
||||||
(syntetic && euclid) ? "∞" :
|
(archimedean && euclid) ? "∞" :
|
||||||
(syntetic && sphere) ? its(isize(currentmap->allcells())) :
|
(archimedean && sphere) ? its(isize(currentmap->allcells())) :
|
||||||
(syntetic && hyperbolic) ? "exp(∞)*?" :
|
(archimedean && hyperbolic) ? "exp(∞)*?" :
|
||||||
worldsize < 0 ? "exp(∞)*" + (nom%denom ? its(nom)+"/"+its(-denom) : its(-worldsize)):
|
worldsize < 0 ? "exp(∞)*" + (nom%denom ? its(nom)+"/"+its(-denom) : its(-worldsize)):
|
||||||
worldsize == 0 ? "∞" :
|
worldsize == 0 ? "∞" :
|
||||||
its(worldsize),
|
its(worldsize),
|
||||||
@ -389,8 +389,8 @@ void showEuclideanMenu() {
|
|||||||
dialog::handleNavigation(sym, uni);
|
dialog::handleNavigation(sym, uni);
|
||||||
if(uni >= 'a' && uni < 'a'+gGUARD) {
|
if(uni >= 'a' && uni < 'a'+gGUARD) {
|
||||||
targetgeometry = eGeometry(uni - 'a');
|
targetgeometry = eGeometry(uni - 'a');
|
||||||
if(targetgeometry == gSyntetic)
|
if(targetgeometry == gArchimedean)
|
||||||
pushScreen(synt::show);
|
pushScreen(arcm::show);
|
||||||
else {
|
else {
|
||||||
stop_game_and_switch_mode(geometry == targetgeometry ? rg::nothing : rg::geometry);
|
stop_game_and_switch_mode(geometry == targetgeometry ? rg::nothing : rg::geometry);
|
||||||
start_game();
|
start_game();
|
||||||
|
@ -45,8 +45,8 @@ void precalc() {
|
|||||||
int vertexdegree = S6/2;
|
int vertexdegree = S6/2;
|
||||||
ld fmin, fmax;
|
ld fmin, fmax;
|
||||||
|
|
||||||
if(syntetic)
|
if(archimedean)
|
||||||
ginf[gSyntetic].cclass = gcHyperbolic;
|
ginf[gArchimedean].cclass = gcHyperbolic;
|
||||||
|
|
||||||
if(euclid) {
|
if(euclid) {
|
||||||
// dynamicval<eGeometry> g(geometry, gNormal);
|
// dynamicval<eGeometry> g(geometry, gNormal);
|
||||||
@ -164,7 +164,7 @@ void precalc() {
|
|||||||
|
|
||||||
gp::compute_geometry();
|
gp::compute_geometry();
|
||||||
irr::compute_geometry();
|
irr::compute_geometry();
|
||||||
if(syntetic) synt::prepare();
|
if(archimedean) arcm::prepare();
|
||||||
}
|
}
|
||||||
|
|
||||||
transmatrix xspinpush(ld dir, ld dist) {
|
transmatrix xspinpush(ld dir, ld dist) {
|
||||||
|
@ -55,7 +55,7 @@ namespace gp { extern gp::local_info draw_li; }
|
|||||||
|
|
||||||
transmatrix calc_relative_matrix(cell *c2, cell *c1, const hyperpoint& point_hint) {
|
transmatrix calc_relative_matrix(cell *c2, cell *c1, const hyperpoint& point_hint) {
|
||||||
|
|
||||||
if(stdsphere) {
|
if(sphere_narcm) {
|
||||||
if(!gmatrix0.count(c2) || !gmatrix0.count(c1)) {
|
if(!gmatrix0.count(c2) || !gmatrix0.count(c1)) {
|
||||||
printf("building gmatrix0 (size=%d)\n", isize(gmatrix0));
|
printf("building gmatrix0 (size=%d)\n", isize(gmatrix0));
|
||||||
auto bak = gp::draw_li;
|
auto bak = gp::draw_li;
|
||||||
@ -79,7 +79,7 @@ transmatrix calc_relative_matrix(cell *c2, cell *c1, const hyperpoint& point_hin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(binarytiling) return binary::relative_matrix(c2->master, c1->master);
|
if(binarytiling) return binary::relative_matrix(c2->master, c1->master);
|
||||||
if(syntetic) return synt::relative_matrix(c2->master, c1->master);
|
if(archimedean) return arcm::relative_matrix(c2->master, c1->master);
|
||||||
|
|
||||||
if(torus) {
|
if(torus) {
|
||||||
transmatrix t = Id;
|
transmatrix t = Id;
|
||||||
@ -389,9 +389,9 @@ hyperpoint get_corner_position(cell *c, int cid, ld cf) {
|
|||||||
vertices[6] = get_horopoint(-yy, 0);
|
vertices[6] = get_horopoint(-yy, 0);
|
||||||
return mid_at_actual(vertices[cid], 3/cf);
|
return mid_at_actual(vertices[cid], 3/cf);
|
||||||
}
|
}
|
||||||
if(syntetic) {
|
if(archimedean) {
|
||||||
if(synt::id_of(c->master) >= synt::N*2) return C0;
|
if(arcm::id_of(c->master) >= arcm::N*2) return C0;
|
||||||
auto& t = synt::get_triangle(c->master, cid);
|
auto& t = arcm::get_triangle(c->master, cid);
|
||||||
return xspinpush0(-t.first, t.second * 3 / cf);
|
return xspinpush0(-t.first, t.second * 3 / cf);
|
||||||
}
|
}
|
||||||
if(nonbitrunc) {
|
if(nonbitrunc) {
|
||||||
@ -432,7 +432,7 @@ hyperpoint midcorner(cell *c, int i, ld v) {
|
|||||||
hyperpoint nlfar = rel * vs2.vertices[(spin+2)%cor2];
|
hyperpoint nlfar = rel * vs2.vertices[(spin+2)%cor2];
|
||||||
return mid_at(nfar, nlfar, .49);
|
return mid_at(nfar, nlfar, .49);
|
||||||
}
|
}
|
||||||
if(syntetic) return C0;
|
if(archimedean) return C0;
|
||||||
printf("midcorner not handled\n");
|
printf("midcorner not handled\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
@ -450,11 +450,11 @@ hyperpoint nearcorner(cell *c, int i) {
|
|||||||
hyperpoint nc = vs.jpoints[vs.neid[i]];
|
hyperpoint nc = vs.jpoints[vs.neid[i]];
|
||||||
return mid_at(C0, nc, .94);
|
return mid_at(C0, nc, .94);
|
||||||
}
|
}
|
||||||
if(syntetic) {
|
if(archimedean) {
|
||||||
auto& t = synt::get_triangle(c->master, i);
|
auto& t = arcm::get_triangle(c->master, i);
|
||||||
int id = synt::id_of(c->master);
|
int id = arcm::id_of(c->master);
|
||||||
int id1 = synt::get_adj(synt::get_adj(c->master, i), -2).first;
|
int id1 = arcm::get_adj(arcm::get_adj(c->master, i), -2).first;
|
||||||
return xspinpush0(-t.first - M_PI / c->type, synt::inradius[id/2] + synt::inradius[id1/2]);
|
return xspinpush0(-t.first - M_PI / c->type, arcm::inradius[id/2] + arcm::inradius[id1/2]);
|
||||||
}
|
}
|
||||||
if(binarytiling) {
|
if(binarytiling) {
|
||||||
ld yx = log(2) / 2;
|
ld yx = log(2) / 2;
|
||||||
@ -503,12 +503,12 @@ hyperpoint farcorner(cell *c, int i, int which) {
|
|||||||
}
|
}
|
||||||
if(binarytiling)
|
if(binarytiling)
|
||||||
return nearcorner(c, (i+which) % c->type); // lazy
|
return nearcorner(c, (i+which) % c->type); // lazy
|
||||||
if(syntetic) {
|
if(archimedean) {
|
||||||
auto& t = synt::get_triangle(c->master, i);
|
auto& t = arcm::get_triangle(c->master, i);
|
||||||
int id = synt::id_of(c->master);
|
int id = arcm::id_of(c->master);
|
||||||
auto id1 = synt::get_adj(synt::get_adj(c->master, i), -2).first;
|
auto id1 = arcm::get_adj(arcm::get_adj(c->master, i), -2).first;
|
||||||
int n1 = isize(synt::adjacent[id1]);
|
int n1 = isize(arcm::adjacent[id1]);
|
||||||
return spin(-t.first - M_PI / c->type) * xpush(synt::inradius[id/2] + synt::inradius[id1/2]) * xspinpush0(M_PI + M_PI/n1*(which?3:-3), synt::circumradius[id1/2]);
|
return spin(-t.first - M_PI / c->type) * xpush(arcm::inradius[id/2] + arcm::inradius[id1/2]) * xspinpush0(M_PI + M_PI/n1*(which?3:-3), arcm::circumradius[id1/2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return cellrelmatrix(c, i) * get_corner_position(c->move(i), (cellwalker(c, i) + wstep + (which?2:-1)).spin);
|
return cellrelmatrix(c, i) * get_corner_position(c->move(i), (cellwalker(c, i) + wstep + (which?2:-1)).spin);
|
||||||
|
14
graph.cpp
14
graph.cpp
@ -235,8 +235,8 @@ void drawLightning(const transmatrix& V) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ld displayspin(cell *c, int d) {
|
ld displayspin(cell *c, int d) {
|
||||||
if(syntetic) {
|
if(archimedean) {
|
||||||
auto& t1 = synt::get_triangle(c->master, d);
|
auto& t1 = arcm::get_triangle(c->master, d);
|
||||||
return -(t1.first + M_PI / c->type);
|
return -(t1.first + M_PI / c->type);
|
||||||
}
|
}
|
||||||
else if(irr::on) {
|
else if(irr::on) {
|
||||||
@ -2391,7 +2391,7 @@ transmatrix applyPatterndir(cell *c, const patterns::patterninfo& si) {
|
|||||||
if(gp::on || irr::on || binarytiling) return Id;
|
if(gp::on || irr::on || binarytiling) return Id;
|
||||||
transmatrix V = ddspin(c, si.dir, M_PI);
|
transmatrix V = ddspin(c, si.dir, M_PI);
|
||||||
if(si.reflect) return V * Mirror;
|
if(si.reflect) return V * Mirror;
|
||||||
if(syntetic) return V * iddspin(c, 0, M_PI);
|
if(archimedean) return V * iddspin(c, 0, M_PI);
|
||||||
return V;
|
return V;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3188,7 +3188,7 @@ bool placeSidewall(cell *c, int i, int sidepar, const transmatrix& V, int col) {
|
|||||||
|
|
||||||
transmatrix V2 = V * ddspin(c, i);
|
transmatrix V2 = V * ddspin(c, i);
|
||||||
|
|
||||||
if(gp::on || irr::on || binarytiling || syntetic) {
|
if(gp::on || irr::on || binarytiling || archimedean) {
|
||||||
draw_shapevec(c, V2, qfi.fshape->gpside[sidepar][i], col, prio);
|
draw_shapevec(c, V2, qfi.fshape->gpside[sidepar][i], col, prio);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -4040,7 +4040,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
|
|||||||
|
|
||||||
case laSwitch:
|
case laSwitch:
|
||||||
set_floor(shSwitchFloor);
|
set_floor(shSwitchFloor);
|
||||||
if(ctof(c) && !gp::on && !irr::on && !syntetic && !binarytiling) for(int i=0; i<c->type; i++)
|
if(ctof(c) && !gp::on && !irr::on && !archimedean && !binarytiling) for(int i=0; i<c->type; i++)
|
||||||
queuepoly(Vf * ddspin(c, i, M_PI/S7) * xpush(rhexf), shSwitchDisk, darkena(minf[active_switch()].color, fd, 0xFF));
|
queuepoly(Vf * ddspin(c, i, M_PI/S7) * xpush(rhexf), shSwitchDisk, darkena(minf[active_switch()].color, fd, 0xFF));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -5238,8 +5238,8 @@ void drawthemap() {
|
|||||||
drawEuclidean();
|
drawEuclidean();
|
||||||
else if(binarytiling)
|
else if(binarytiling)
|
||||||
binary::draw();
|
binary::draw();
|
||||||
else if(syntetic)
|
else if(archimedean)
|
||||||
synt::draw();
|
arcm::draw();
|
||||||
else
|
else
|
||||||
drawrec(viewctr, hsOrigin, cview());
|
drawrec(viewctr, hsOrigin, cview());
|
||||||
drawWormSegments();
|
drawWormSegments();
|
||||||
|
@ -77,7 +77,7 @@ heptagon *buildHeptagon1(heptagon *h, heptagon *parent, int d, hstate s, int par
|
|||||||
|
|
||||||
heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fixdistance = COMPUTE) {
|
heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fixdistance = COMPUTE) {
|
||||||
heptagon *h = buildHeptagon1(new heptagon, parent, d, s, pard, fixdistance);
|
heptagon *h = buildHeptagon1(new heptagon, parent, d, s, pard, fixdistance);
|
||||||
if(binarytiling || syntetic) return h;
|
if(binarytiling || archimedean) return h;
|
||||||
if(parent->c7) {
|
if(parent->c7) {
|
||||||
if(irr::on)
|
if(irr::on)
|
||||||
irr::link_next(parent, d);
|
irr::link_next(parent, d);
|
||||||
@ -214,8 +214,8 @@ heptagon *createStep(heptagon *h, int d) {
|
|||||||
d = h->c.fix(d);
|
d = h->c.fix(d);
|
||||||
if(!h->move(d) && binarytiling)
|
if(!h->move(d) && binarytiling)
|
||||||
return binary::createStep(h, d);
|
return binary::createStep(h, d);
|
||||||
if(!h->move(d) && syntetic) {
|
if(!h->move(d) && archimedean) {
|
||||||
synt::create_adjacent(h, d);
|
arcm::create_adjacent(h, d);
|
||||||
return h->move(d);
|
return h->move(d);
|
||||||
}
|
}
|
||||||
if(!h->move(0) && h->s != hsOrigin && !binarytiling) {
|
if(!h->move(0) && h->s != hsOrigin && !binarytiling) {
|
||||||
|
12
hyper.h
12
hyper.h
@ -84,11 +84,11 @@ void addMessage(string s, char spamtype = 0);
|
|||||||
#define S3 ginf[geometry].vertex
|
#define S3 ginf[geometry].vertex
|
||||||
#define hyperbolic_37 (S7 == 7 && S3 == 3 && !binarytiling)
|
#define hyperbolic_37 (S7 == 7 && S3 == 3 && !binarytiling)
|
||||||
#define hyperbolic_not37 ((S7 > 7 || S3 > 3 || binarytiling) && hyperbolic)
|
#define hyperbolic_not37 ((S7 > 7 || S3 > 3 || binarytiling) && hyperbolic)
|
||||||
#define weirdhyperbolic ((S7 > 7 || S3 > 3 || gp::on || irr::on || binarytiling || syntetic) && hyperbolic)
|
#define weirdhyperbolic ((S7 > 7 || S3 > 3 || gp::on || irr::on || binarytiling || archimedean) && hyperbolic)
|
||||||
#define stdhyperbolic (S7 == 7 && S3 == 3 && !gp::on && !irr::on && !binarytiling && !syntetic)
|
#define stdhyperbolic (S7 == 7 && S3 == 3 && !gp::on && !irr::on && !binarytiling && !archimedean)
|
||||||
|
|
||||||
#define binarytiling (geometry == gBinaryTiling)
|
#define binarytiling (geometry == gBinaryTiling)
|
||||||
#define syntetic (geometry == gSyntetic)
|
#define archimedean (geometry == gArchimedean)
|
||||||
#define eubinary (euclid || binarytiling)
|
#define eubinary (euclid || binarytiling)
|
||||||
|
|
||||||
#define cgclass (ginf[geometry].cclass)
|
#define cgclass (ginf[geometry].cclass)
|
||||||
@ -104,7 +104,7 @@ void addMessage(string s, char spamtype = 0);
|
|||||||
#define bounded (sphere || quotient || torus)
|
#define bounded (sphere || quotient || torus)
|
||||||
|
|
||||||
#define masterless among(geometry, gEuclid, gEuclidSquare, gTorus)
|
#define masterless among(geometry, gEuclid, gEuclidSquare, gTorus)
|
||||||
#define stdsphere (sphere && !syntetic)
|
#define sphere_narcm (sphere && !archimedean)
|
||||||
|
|
||||||
#define a4 (S3 == 4)
|
#define a4 (S3 == 4)
|
||||||
#define a45 (S3 == 4 && S7 == 5)
|
#define a45 (S3 == 4 && S7 == 5)
|
||||||
@ -472,7 +472,7 @@ struct cell : gcell {
|
|||||||
cell* cmove(int d) { return createMov(this, d); }
|
cell* cmove(int d) { return createMov(this, d); }
|
||||||
};
|
};
|
||||||
|
|
||||||
int heptagon::degree() { if(syntetic) return c7->type; else return S7; }
|
int heptagon::degree() { if(archimedean) return c7->type; else return S7; }
|
||||||
|
|
||||||
using heptspin = walker<heptagon>;
|
using heptspin = walker<heptagon>;
|
||||||
using cellwalker = walker<cell>;
|
using cellwalker = walker<cell>;
|
||||||
@ -3828,7 +3828,7 @@ namespace binary {
|
|||||||
heptagon *createStep(heptagon *parent, int d);
|
heptagon *createStep(heptagon *parent, int d);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace synt {
|
namespace arcm {
|
||||||
void initialize(heptagon *root);
|
void initialize(heptagon *root);
|
||||||
transmatrix relative_matrix(heptagon *h1, heptagon *h2);
|
transmatrix relative_matrix(heptagon *h1, heptagon *h2);
|
||||||
short& id_of(heptagon *);
|
short& id_of(heptagon *);
|
||||||
|
10
hypgraph.cpp
10
hypgraph.cpp
@ -499,20 +499,20 @@ bool confusingGeometry() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ld master_to_c7_angle() {
|
ld master_to_c7_angle() {
|
||||||
return (nonbitrunc && !binarytiling && !syntetic) ? M_PI + gp::alpha : 0;
|
return (nonbitrunc && !binarytiling && !archimedean) ? M_PI + gp::alpha : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
transmatrix actualV(const heptspin& hs, const transmatrix& V) {
|
transmatrix actualV(const heptspin& hs, const transmatrix& V) {
|
||||||
if(irr::on)
|
if(irr::on)
|
||||||
return V * spin(M_PI + 2 * M_PI / S7 * (hs.spin + irr::periodmap[hs.at].base.spin));
|
return V * spin(M_PI + 2 * M_PI / S7 * (hs.spin + irr::periodmap[hs.at].base.spin));
|
||||||
if(syntetic) return V * spin(-synt::triangles[synt::id_of(hs.at)][hs.spin].first);
|
if(archimedean) return V * spin(-arcm::triangles[arcm::id_of(hs.at)][hs.spin].first);
|
||||||
if(binarytiling) return V;
|
if(binarytiling) return V;
|
||||||
return (hs.spin || nonbitrunc) ? V * spin(hs.spin*2*M_PI/S7 + master_to_c7_angle()) : V;
|
return (hs.spin || nonbitrunc) ? V * spin(hs.spin*2*M_PI/S7 + master_to_c7_angle()) : V;
|
||||||
}
|
}
|
||||||
|
|
||||||
transmatrix applyspin(const heptspin& hs, const transmatrix& V) {
|
transmatrix applyspin(const heptspin& hs, const transmatrix& V) {
|
||||||
if(binarytiling) return V;
|
if(binarytiling) return V;
|
||||||
if(syntetic) return V * spin(synt::triangles[synt::id_of(hs.at)][hs.spin].first);
|
if(archimedean) return V * spin(arcm::triangles[arcm::id_of(hs.at)][hs.spin].first);
|
||||||
return hs.spin ? V * spin(hs.spin*2*M_PI/S7) : V;
|
return hs.spin ? V * spin(hs.spin*2*M_PI/S7) : V;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -804,11 +804,11 @@ void optimizeview() {
|
|||||||
|
|
||||||
transmatrix TB = Id;
|
transmatrix TB = Id;
|
||||||
|
|
||||||
if(binarytiling || syntetic) {
|
if(binarytiling || archimedean) {
|
||||||
turn = -1, best = View[2][2];
|
turn = -1, best = View[2][2];
|
||||||
for(int i=0; i<viewctr.at->c7->type; i++) {
|
for(int i=0; i<viewctr.at->c7->type; i++) {
|
||||||
heptagon *h2 = createStep(viewctr.at, i);
|
heptagon *h2 = createStep(viewctr.at, i);
|
||||||
transmatrix T = (binarytiling) ? binary::relative_matrix(h2, viewctr.at) : synt::relative_matrix(h2, viewctr.at);
|
transmatrix T = (binarytiling) ? binary::relative_matrix(h2, viewctr.at) : arcm::relative_matrix(h2, viewctr.at);
|
||||||
hyperpoint H = View * tC0(T);
|
hyperpoint H = View * tC0(T);
|
||||||
ld quality = euclid ? hdist0(H) : H[2];
|
ld quality = euclid ? hdist0(H) : H[2];
|
||||||
if(quality < best) best = quality, turn = i, TB = T;
|
if(quality < best) best = quality, turn = i, TB = T;
|
||||||
|
20
landgen.cpp
20
landgen.cpp
@ -480,9 +480,9 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
else
|
else
|
||||||
v = 6;
|
v = 6;
|
||||||
}
|
}
|
||||||
else if(syntetic && synt::have_line)
|
else if(archimedean && arcm::have_line)
|
||||||
v = synt::linespattern(c) ? 24 : 16;
|
v = arcm::linespattern(c) ? 24 : 16;
|
||||||
else if(torus || hyperbolic_not37 || quotient || syntetic) {
|
else if(torus || hyperbolic_not37 || quotient || archimedean) {
|
||||||
v = hrand(100) < 25 ? 24 : 16;
|
v = hrand(100) < 25 ? 24 : 16;
|
||||||
}
|
}
|
||||||
else if(euclid) {
|
else if(euclid) {
|
||||||
@ -543,9 +543,9 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
case laZebra:
|
case laZebra:
|
||||||
if(d==8) {
|
if(d==8) {
|
||||||
if(torus) ;
|
if(torus) ;
|
||||||
else if(syntetic && synt::have_line)
|
else if(archimedean && arcm::have_line)
|
||||||
c->wall = synt::linespattern(c) ? waTrapdoor : waNone;
|
c->wall = arcm::linespattern(c) ? waTrapdoor : waNone;
|
||||||
else if(euclid && !syntetic) {
|
else if(euclid && !archimedean) {
|
||||||
int x,y;
|
int x,y;
|
||||||
tie(x,y) = cell_to_pair(c);
|
tie(x,y) = cell_to_pair(c);
|
||||||
if(y&1) c->wall = waTrapdoor;
|
if(y&1) c->wall = waTrapdoor;
|
||||||
@ -565,15 +565,15 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
case laWineyard:
|
case laWineyard:
|
||||||
if(d==8) {
|
if(d==8) {
|
||||||
if(torus) ;
|
if(torus) ;
|
||||||
else if(syntetic && synt::have_line)
|
else if(archimedean && arcm::have_line)
|
||||||
c->wall = synt::linespattern(c) ? waVinePlant : waNone;
|
c->wall = arcm::linespattern(c) ? waVinePlant : waNone;
|
||||||
else if(euclid && !syntetic) {
|
else if(euclid && !archimedean) {
|
||||||
int x,y;
|
int x,y;
|
||||||
tie(x,y) = cell_to_pair(c);
|
tie(x,y) = cell_to_pair(c);
|
||||||
int dy = gmod(y, 3);
|
int dy = gmod(y, 3);
|
||||||
if(dy == 1) c->wall = waVinePlant;
|
if(dy == 1) c->wall = waVinePlant;
|
||||||
}
|
}
|
||||||
else if(a4 || sphere || syntetic)
|
else if(a4 || sphere || archimedean)
|
||||||
c->wall = hrand(100) < 50 ? waNone : waVinePlant;
|
c->wall = hrand(100) < 50 ? waNone : waVinePlant;
|
||||||
else {
|
else {
|
||||||
int v = emeraldval(c);
|
int v = emeraldval(c);
|
||||||
|
@ -264,7 +264,7 @@ bool haveOrbPower() {
|
|||||||
cell *c = dcal[i];
|
cell *c = dcal[i];
|
||||||
if(itemclass(c->item) == IC_ORB) return true;
|
if(itemclass(c->item) == IC_ORB) return true;
|
||||||
}
|
}
|
||||||
else if(stdsphere) for(int i=0; i<spherecells(); i++) {
|
else if(sphere_narcm) for(int i=0; i<spherecells(); i++) {
|
||||||
cell *c = getDodecahedron(i)->c7;
|
cell *c = getDodecahedron(i)->c7;
|
||||||
if(itemclass(c->item) == IC_ORB) return true;
|
if(itemclass(c->item) == IC_ORB) return true;
|
||||||
forCellEx(c2, c) if(itemclass(c2->item) == IC_ORB) return true;
|
forCellEx(c2, c) if(itemclass(c2->item) == IC_ORB) return true;
|
||||||
@ -446,7 +446,7 @@ void wandering() {
|
|||||||
}
|
}
|
||||||
if(!peace::on && c->land == laKraken && ((sphere && !hrand(15)) || wchance(items[itKraken], 240)) && !kraken_pseudohept(c)) {
|
if(!peace::on && c->land == laKraken && ((sphere && !hrand(15)) || wchance(items[itKraken], 240)) && !kraken_pseudohept(c)) {
|
||||||
bool b = sphere || canReachPlayer(c, moKrakenH);
|
bool b = sphere || canReachPlayer(c, moKrakenH);
|
||||||
if(stdsphere && (haveKraken() || !items[itOrbFish])) {
|
if(sphere_narcm && (haveKraken() || !items[itOrbFish])) {
|
||||||
c->monst = moViking; c->wall = waBoat; c->item = itOrbFish;
|
c->monst = moViking; c->wall = waBoat; c->item = itOrbFish;
|
||||||
playSeenSound(c);
|
playSeenSound(c);
|
||||||
continue;
|
continue;
|
||||||
|
46
pattern2.cpp
46
pattern2.cpp
@ -50,8 +50,8 @@ bool ishex2(cell *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int chessvalue(cell *c) {
|
int chessvalue(cell *c) {
|
||||||
if(syntetic)
|
if(archimedean)
|
||||||
return synt::chessvalue(c);
|
return arcm::chessvalue(c);
|
||||||
else
|
else
|
||||||
return celldist(c) & 1;
|
return celldist(c) & 1;
|
||||||
}
|
}
|
||||||
@ -350,7 +350,7 @@ int fieldval_uniq(cell *c) {
|
|||||||
auto p = cell_to_pair(c);
|
auto p = cell_to_pair(c);
|
||||||
return gmod(p.first * torusconfig::dx + p.second * torusconfig::dy, torusconfig::qty);
|
return gmod(p.first * torusconfig::dx + p.second * torusconfig::dy, torusconfig::qty);
|
||||||
}
|
}
|
||||||
else if(binarytiling || syntetic) return 0;
|
else if(binarytiling || archimedean) return 0;
|
||||||
if(ctof(c) || gp::on || irr::on) return c->master->fieldval/S7;
|
if(ctof(c) || gp::on || irr::on) return c->master->fieldval/S7;
|
||||||
else {
|
else {
|
||||||
int z = 0;
|
int z = 0;
|
||||||
@ -730,7 +730,7 @@ namespace patterns {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void val_all(cell *c, patterninfo &si, int sub, int pat) {
|
void val_all(cell *c, patterninfo &si, int sub, int pat) {
|
||||||
if(irr::on || syntetic || binarytiling) si.symmetries = 1;
|
if(irr::on || archimedean || binarytiling) si.symmetries = 1;
|
||||||
else if(a46) val46(c, si, sub, pat);
|
else if(a46) val46(c, si, sub, pat);
|
||||||
else if(a38) val38(c, si, sub, pat);
|
else if(a38) val38(c, si, sub, pat);
|
||||||
else if(sphere) valSibling(c, si, sub, pat);
|
else if(sphere) valSibling(c, si, sub, pat);
|
||||||
@ -893,13 +893,13 @@ namespace patterns {
|
|||||||
return si;
|
return si;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(syntetic && pat == PAT_SIBLING) {
|
if(archimedean && pat == PAT_SIBLING) {
|
||||||
int id = synt::id_of(c->master);
|
int id = arcm::id_of(c->master);
|
||||||
si.id = synt::tilegroup[id];
|
si.id = arcm::tilegroup[id];
|
||||||
si.symmetries = synt::periods[si.id];
|
si.symmetries = arcm::periods[si.id];
|
||||||
si.dir = synt::groupoffset[id];
|
si.dir = arcm::groupoffset[id];
|
||||||
if((sub & SPF_EXTRASYM) && synt::have_symmetry && synt::tilegroup[id^1] < synt::tilegroup[id])
|
if((sub & SPF_EXTRASYM) && arcm::have_symmetry && arcm::tilegroup[id^1] < arcm::tilegroup[id])
|
||||||
si.id = synt::tilegroup[id^1],
|
si.id = arcm::tilegroup[id^1],
|
||||||
si.reflect = true;
|
si.reflect = true;
|
||||||
return si;
|
return si;
|
||||||
}
|
}
|
||||||
@ -1066,7 +1066,7 @@ int geosupport_threecolor() {
|
|||||||
return 2;
|
return 2;
|
||||||
if(a46 && nonbitrunc)
|
if(a46 && nonbitrunc)
|
||||||
return 1;
|
return 1;
|
||||||
if(syntetic) return synt::support_threecolor();
|
if(archimedean) return arcm::support_threecolor();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1074,7 +1074,7 @@ int geosupport_graveyard() {
|
|||||||
// always works in bitrunc geometries
|
// always works in bitrunc geometries
|
||||||
if(!nonbitrunc) return 2;
|
if(!nonbitrunc) return 2;
|
||||||
|
|
||||||
if(syntetic) return synt::support_graveyard();
|
if(archimedean) return arcm::support_graveyard();
|
||||||
|
|
||||||
if(irr::on) return irr::bitruncations_performed ? 2 : 1;
|
if(irr::on) return irr::bitruncations_performed ? 2 : 1;
|
||||||
|
|
||||||
@ -1090,7 +1090,7 @@ int geosupport_graveyard() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int pattern_threecolor(cell *c) {
|
int pattern_threecolor(cell *c) {
|
||||||
if(syntetic) return synt::threecolor(synt::id_of(c->master));
|
if(archimedean) return arcm::threecolor(arcm::id_of(c->master));
|
||||||
if(S3 == 3 && !(S7&1) && gp_threecolor() == 1 && c->master->c7 != c) {
|
if(S3 == 3 && !(S7&1) && gp_threecolor() == 1 && c->master->c7 != c) {
|
||||||
auto li = gp::get_local_info(c);
|
auto li = gp::get_local_info(c);
|
||||||
int rel = (li.relative.first - li.relative.second + MODFIXER) % 3;
|
int rel = (li.relative.first - li.relative.second + MODFIXER) % 3;
|
||||||
@ -1191,7 +1191,7 @@ int pattern_threecolor(cell *c) {
|
|||||||
bool pseudohept(cell *c) {
|
bool pseudohept(cell *c) {
|
||||||
if(irr::on) return irr::pseudohept(c);
|
if(irr::on) return irr::pseudohept(c);
|
||||||
if(binarytiling) return c->type & c->master->distance & 1;
|
if(binarytiling) return c->type & c->master->distance & 1;
|
||||||
if(syntetic) return synt::pseudohept(synt::id_of(c->master));
|
if(archimedean) return arcm::pseudohept(arcm::id_of(c->master));
|
||||||
if(gp::on && gp_threecolor() == 2)
|
if(gp::on && gp_threecolor() == 2)
|
||||||
return gp::pseudohept_val(c) == 0;
|
return gp::pseudohept_val(c) == 0;
|
||||||
if(gp::on && gp_threecolor() == 1 && (S7&1) && (S3 == 3))
|
if(gp::on && gp_threecolor() == 1 && (S7&1) && (S3 == 3))
|
||||||
@ -1233,8 +1233,8 @@ namespace patterns {
|
|||||||
char whichCanvas = 0;
|
char whichCanvas = 0;
|
||||||
|
|
||||||
int generateCanvas(cell *c) {
|
int generateCanvas(cell *c) {
|
||||||
if(whichCanvas == 'A' && syntetic)
|
if(whichCanvas == 'A' && archimedean)
|
||||||
return distcolors[synt::tilegroup[synt::id_of(c->master)] & 7];
|
return distcolors[arcm::tilegroup[arcm::id_of(c->master)] & 7];
|
||||||
if(whichCanvas == 'C' && hyperbolic) {
|
if(whichCanvas == 'C' && hyperbolic) {
|
||||||
using namespace fieldpattern;
|
using namespace fieldpattern;
|
||||||
int z = currfp.getdist(fieldval(c), make_pair(0,false));
|
int z = currfp.getdist(fieldval(c), make_pair(0,false));
|
||||||
@ -1410,7 +1410,7 @@ namespace patterns {
|
|||||||
dialog::addSelItem(XLAT("field pattern S"), "field", 'S');
|
dialog::addSelItem(XLAT("field pattern S"), "field", 'S');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(syntetic)
|
if(archimedean)
|
||||||
dialog::addSelItem(XLAT("Archimedean"), "Archimedean", 'A');
|
dialog::addSelItem(XLAT("Archimedean"), "Archimedean", 'A');
|
||||||
|
|
||||||
dialog::addBreak(100);
|
dialog::addBreak(100);
|
||||||
@ -1481,7 +1481,7 @@ namespace patterns {
|
|||||||
if(stdhyperbolic || euclid)
|
if(stdhyperbolic || euclid)
|
||||||
dialog::addBoolItem(XLAT("Palace Pattern"), (whichPattern == PAT_PALACE), PAT_PALACE);
|
dialog::addBoolItem(XLAT("Palace Pattern"), (whichPattern == PAT_PALACE), PAT_PALACE);
|
||||||
|
|
||||||
if((nonbitrunc && S3 == 4) || (syntetic && synt::support_chessboard()))
|
if((nonbitrunc && S3 == 4) || (archimedean && arcm::support_chessboard()))
|
||||||
dialog::addBoolItem(XLAT("chessboard"), (whichPattern == PAT_CHESS), PAT_CHESS);
|
dialog::addBoolItem(XLAT("chessboard"), (whichPattern == PAT_CHESS), PAT_CHESS);
|
||||||
|
|
||||||
if(a38 || a46 || euclid || S3 == 4 || S7 == 4)
|
if(a38 || a46 || euclid || S3 == 4 || S7 == 4)
|
||||||
@ -1490,7 +1490,7 @@ namespace patterns {
|
|||||||
if(sphere)
|
if(sphere)
|
||||||
dialog::addBoolItem(XLAT("siblings"), (whichPattern == PAT_SIBLING), PAT_SIBLING);
|
dialog::addBoolItem(XLAT("siblings"), (whichPattern == PAT_SIBLING), PAT_SIBLING);
|
||||||
|
|
||||||
if(syntetic)
|
if(archimedean)
|
||||||
dialog::addBoolItem(XLAT("Archimedean"), (whichPattern == PAT_SIBLING), PAT_SIBLING);
|
dialog::addBoolItem(XLAT("Archimedean"), (whichPattern == PAT_SIBLING), PAT_SIBLING);
|
||||||
|
|
||||||
if(euclid)
|
if(euclid)
|
||||||
@ -1536,10 +1536,10 @@ namespace patterns {
|
|||||||
dialog::addBoolItem(XLAT("symmetry 0-2"), subpattern_flags & SPF_SYM02, '2');
|
dialog::addBoolItem(XLAT("symmetry 0-2"), subpattern_flags & SPF_SYM02, '2');
|
||||||
dialog::addBoolItem(XLAT("symmetry 0-3"), subpattern_flags & SPF_SYM03, '3');
|
dialog::addBoolItem(XLAT("symmetry 0-3"), subpattern_flags & SPF_SYM03, '3');
|
||||||
}
|
}
|
||||||
if(euclid && among(whichPattern, PAT_COLORING, 0) && !syntetic)
|
if(euclid && among(whichPattern, PAT_COLORING, 0) && !archimedean)
|
||||||
dialog::addBoolItem(XLAT("extra symmetries"), subpattern_flags & SPF_EXTRASYM, '=');
|
dialog::addBoolItem(XLAT("extra symmetries"), subpattern_flags & SPF_EXTRASYM, '=');
|
||||||
|
|
||||||
if(syntetic && synt::have_symmetry && whichPattern == PAT_SIBLING)
|
if(archimedean && arcm::have_symmetry && whichPattern == PAT_SIBLING)
|
||||||
dialog::addBoolItem(XLAT("extra symmetries"), subpattern_flags & SPF_EXTRASYM, '=');
|
dialog::addBoolItem(XLAT("extra symmetries"), subpattern_flags & SPF_EXTRASYM, '=');
|
||||||
|
|
||||||
if(whichPattern == PAT_SINGLETYPE) {
|
if(whichPattern == PAT_SINGLETYPE) {
|
||||||
@ -2089,7 +2089,7 @@ namespace linepatterns {
|
|||||||
col,
|
col,
|
||||||
1 + vid.linequality);
|
1 + vid.linequality);
|
||||||
}
|
}
|
||||||
else if(syntetic) {
|
else if(archimedean) {
|
||||||
if(!pseudohept(c)) for(int i=0; i<c->type; i++) if(c->move(i) && c < c->move(i) && !pseudohept(c->move(i)) && gmatrix.count(c->move(i)))
|
if(!pseudohept(c)) for(int i=0; i<c->type; i++) if(c->move(i) && c < c->move(i) && !pseudohept(c->move(i)) && gmatrix.count(c->move(i)))
|
||||||
queuelinef(tC0(V), gmatrix[c->move(i)]*C0,
|
queuelinef(tC0(V), gmatrix[c->move(i)]*C0,
|
||||||
col,
|
col,
|
||||||
|
16
polygons.cpp
16
polygons.cpp
@ -1328,7 +1328,7 @@ transmatrix ddi(int a, ld x) { return xspinpush(a * M_PI / S42, x); }
|
|||||||
|
|
||||||
void drawTentacle(hpcshape &h, ld rad, ld var, ld divby) {
|
void drawTentacle(hpcshape &h, ld rad, ld var, ld divby) {
|
||||||
double tlength = max(crossf, hexhexdist * gp::scale * irr::scale);
|
double tlength = max(crossf, hexhexdist * gp::scale * irr::scale);
|
||||||
if(syntetic) tlength = synt::edgelength;
|
if(archimedean) tlength = arcm::edgelength;
|
||||||
int max = int(20 * pow(2, vid.linequality));
|
int max = int(20 * pow(2, vid.linequality));
|
||||||
for(ld i=0; i<=max; i++)
|
for(ld i=0; i<=max; i++)
|
||||||
hpcpush(ddi(S21, rad + var * sin(i * M_PI/divby)) * ddi(0, tlength * i/max) * C0);
|
hpcpush(ddi(S21, rad + var * sin(i * M_PI/divby)) * ddi(0, tlength * i/max) * C0);
|
||||||
@ -1432,7 +1432,7 @@ void bshape(hpcshape& sh, int p, double shzoom, int shapeid, double bonus = 0, f
|
|||||||
while(polydata[whereis + 2*qty] != NEWSHAPE) qty++;
|
while(polydata[whereis + 2*qty] != NEWSHAPE) qty++;
|
||||||
double shzoomx = shzoom;
|
double shzoomx = shzoom;
|
||||||
double shzoomy = shzoom;
|
double shzoomy = shzoom;
|
||||||
if(shzoom == WOLF) shzoomx = 1.5 * (nonbitrunc && !syntetic ? crossf / hcrossf : 1), shzoomy = 1.6 * (nonbitrunc && !syntetic ? crossf / hcrossf : 1);
|
if(shzoom == WOLF) shzoomx = 1.5 * (nonbitrunc && !archimedean ? crossf / hcrossf : 1), shzoomy = 1.6 * (nonbitrunc && !archimedean ? crossf / hcrossf : 1);
|
||||||
int rots2 = rots;
|
int rots2 = rots;
|
||||||
// shapes 368..370 are specially designed
|
// shapes 368..370 are specially designed
|
||||||
if(!(shapeid >= 368 && shapeid <= 370)) {
|
if(!(shapeid >= 368 && shapeid <= 370)) {
|
||||||
@ -1631,12 +1631,12 @@ void buildpolys() {
|
|||||||
floorrad1 = rhexf * .8;
|
floorrad1 = rhexf * .8;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(syntetic) {
|
if(archimedean) {
|
||||||
triangleside = synt::edgelength;
|
triangleside = arcm::edgelength;
|
||||||
goldbf = 1;
|
goldbf = 1;
|
||||||
scalef = synt::edgelength / hcrossf7;
|
scalef = arcm::edgelength / hcrossf7;
|
||||||
floorrad0 = floorrad1 = triangleside * .45;
|
floorrad0 = floorrad1 = triangleside * .45;
|
||||||
xcrossf = synt::edgelength;
|
xcrossf = arcm::edgelength;
|
||||||
zhexf = xcrossf * .55;
|
zhexf = xcrossf * .55;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1994,8 +1994,8 @@ void buildpolys() {
|
|||||||
if(a46 && !nonbitrunc) spzoom6 *= .9;
|
if(a46 && !nonbitrunc) spzoom6 *= .9;
|
||||||
if(a47 && !nonbitrunc) spzoom6 *= .85;
|
if(a47 && !nonbitrunc) spzoom6 *= .85;
|
||||||
|
|
||||||
if(syntetic)
|
if(archimedean)
|
||||||
shFullFloor.configure(synt::edgelength/2, synt::edgelength/2);
|
shFullFloor.configure(arcm::edgelength/2, arcm::edgelength/2);
|
||||||
else
|
else
|
||||||
shFullFloor.configure(hexvdist, rhexf);
|
shFullFloor.configure(hexvdist, rhexf);
|
||||||
shFloor.configure(floorrad0, floorrad1);
|
shFloor.configure(floorrad0, floorrad1);
|
||||||
|
Loading…
Reference in New Issue
Block a user