mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-12-24 17:10:36 +00:00
fake working in subcubes
This commit is contained in:
parent
456c0ae435
commit
7d930b6f29
35
fake.cpp
35
fake.cpp
@ -34,6 +34,7 @@ EX namespace fake {
|
|||||||
if(arcm::in() && PURE) return true;
|
if(arcm::in() && PURE) return true;
|
||||||
if(WDIM == 2) return false;
|
if(WDIM == 2) return false;
|
||||||
if(among(geometry, gBitrunc3)) return false;
|
if(among(geometry, gBitrunc3)) return false;
|
||||||
|
if(reg3::in() && !among(variation, eVariation::pure, eVariation::subcubes)) return false;
|
||||||
return euc::in() || reg3::in();
|
return euc::in() || reg3::in();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,17 +87,35 @@ EX namespace fake {
|
|||||||
transmatrix adj(cell *c, int d) override {
|
transmatrix adj(cell *c, int d) override {
|
||||||
transmatrix S1, S2;
|
transmatrix S1, S2;
|
||||||
ld dist;
|
ld dist;
|
||||||
|
if(variation == eVariation::subcubes && c->master == c->cmove(d)->master) {
|
||||||
|
auto& s1 = get_cellshape(c);
|
||||||
|
auto& s2 = get_cellshape(c->move(d));
|
||||||
|
return s1.from_cellcenter * s2.to_cellcenter;
|
||||||
|
}
|
||||||
in_underlying([c, d, &S1, &S2, &dist] {
|
in_underlying([c, d, &S1, &S2, &dist] {
|
||||||
#if CAP_ARCM
|
#if CAP_ARCM
|
||||||
dynamicval<bool> u(arcm::use_gmatrix, false);
|
dynamicval<bool> u(arcm::use_gmatrix, false);
|
||||||
#endif
|
#endif
|
||||||
transmatrix T = currentmap->adj(c, d);
|
transmatrix T;
|
||||||
|
if(variation == eVariation::subcubes) {
|
||||||
|
T = currentmap->adj(c->master, d);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
T = currentmap->adj(c, d);
|
||||||
|
}
|
||||||
S1 = rspintox(tC0(T));
|
S1 = rspintox(tC0(T));
|
||||||
transmatrix T1 = spintox(tC0(T)) * T;
|
transmatrix T1 = spintox(tC0(T)) * T;
|
||||||
dist = hdist0(tC0(T1));
|
dist = hdist0(tC0(T1));
|
||||||
S2 = xpush(-dist) * T1;
|
S2 = xpush(-dist) * T1;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if(variation == eVariation::subcubes) {
|
||||||
|
auto& s1 = get_cellshape(c);
|
||||||
|
auto& s2 = get_cellshape(c->move(d));
|
||||||
|
S1 = s1.from_cellcenter * S1;
|
||||||
|
S2 = S2 * s2.to_cellcenter;
|
||||||
|
}
|
||||||
|
|
||||||
#if CAP_ARCM
|
#if CAP_ARCM
|
||||||
if(arcm::in()) {
|
if(arcm::in()) {
|
||||||
int t = arcm::id_of(c->master);
|
int t = arcm::id_of(c->master);
|
||||||
@ -289,6 +308,15 @@ EX namespace fake {
|
|||||||
ld spin_angle(cell *c, int d) override {
|
ld spin_angle(cell *c, int d) override {
|
||||||
return underlying_map->spin_angle(c,d);
|
return underlying_map->spin_angle(c,d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int shvid(cell *c) override {
|
||||||
|
return FPIU( currentmap->shvid(c) );
|
||||||
|
}
|
||||||
|
|
||||||
|
subcellshape& get_cellshape(cell *c) override {
|
||||||
|
return *FPIU( (cgip = pcgip, &(currentmap->get_cellshape(c))) );
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
EX hrmap* new_map() { return new hrmap_fake; }
|
EX hrmap* new_map() { return new hrmap_fake; }
|
||||||
@ -298,6 +326,7 @@ EX namespace fake {
|
|||||||
#if HDR
|
#if HDR
|
||||||
template<class T> auto in_underlying_geometry(const T& f) -> decltype(f()) {
|
template<class T> auto in_underlying_geometry(const T& f) -> decltype(f()) {
|
||||||
if(!fake::in()) return f();
|
if(!fake::in()) return f();
|
||||||
|
pcgip = cgip;
|
||||||
dynamicval<eGeometry> g(geometry, underlying);
|
dynamicval<eGeometry> g(geometry, underlying);
|
||||||
dynamicval<eGeometry> gag(actual_geometry, geometry);
|
dynamicval<eGeometry> gag(actual_geometry, geometry);
|
||||||
dynamicval<geometry_information*> gc(cgip, underlying_cgip);
|
dynamicval<geometry_information*> gc(cgip, underlying_cgip);
|
||||||
@ -403,7 +432,9 @@ EX void generate() {
|
|||||||
|
|
||||||
compute_around(true);
|
compute_around(true);
|
||||||
hsh.compute_hept();
|
hsh.compute_hept();
|
||||||
reg3::compute_ultra();
|
reg3::compute_ultra();
|
||||||
|
|
||||||
|
reg3::generate_subcells();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user