From 13e5c3a555d67ccc4d105d1ceec95c8faec43aa6 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Mon, 20 Aug 2018 16:28:47 +0200 Subject: [PATCH] windmap now works on Goldberg, irregular, and Archimedean spheres --- complex.cpp | 2 +- floorshapes.cpp | 4 ++-- pattern2.cpp | 11 ++++++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/complex.cpp b/complex.cpp index 3707e508..7a6cd233 100644 --- a/complex.cpp +++ b/complex.cpp @@ -3093,7 +3093,7 @@ namespace windmap { // cw.spin = 0; neighbors.emplace_back(); auto &v = neighbors.back(); - if(gp::on || irr::on) + if((gp::on || irr::on) && !sphere) for(int l=0; lmaster, cw.spin); hs = hs + l + wstep; diff --git a/floorshapes.cpp b/floorshapes.cpp index b21ec081..d8824196 100644 --- a/floorshapes.cpp +++ b/floorshapes.cpp @@ -538,11 +538,11 @@ namespace gp { int siid, sidir; if(geosupport_threecolor() == 2) { auto si = patterns::getpatterninfo(c, patterns::PAT_COLORING, 0); - siid = (si.id>>2) ? 1 : 0; + siid = si.id>>2; // if(siid == 2) si.dir++; // if(siid != pattern_threecolor(c)) printf("threecolor mismatch\n"); // if(pattern_threecolor(createMov(c, fixdir(si.dir, c))) != (siid+1)%3) printf("threecolor mismatch direction\n"); - sidir = (fixdir(si.dir, c)) & 1; + sidir = fixdir(si.dir, c); } else if(geosupport_football() == 2) { siid = !pseudohept(c); diff --git a/pattern2.cpp b/pattern2.cpp index 096fa38a..6ef1938e 100644 --- a/pattern2.cpp +++ b/pattern2.cpp @@ -339,10 +339,11 @@ pair fieldval(cell *c) { } int fieldval_uniq(cell *c) { - if(archimedean && sphere) - return c->master->fiftyval; if(sphere) { - if(ctof(c) || gp::on || irr::on) return c->master->fieldval; + if(archimedean) return c->master->fiftyval; + else if(irr::on) return irr::cellindex[c]; + else if(gp::on) return (get_code(gp::get_local_info(c)) << 8) | (c->master->fieldval / S7); + if(ctof(c)) return c->master->fieldval; else return createMov(c, 0)->master->fieldval + 256 * createMov(c,2)->master->fieldval + (1<<16) * createMov(c,4)->master->fieldval; } else if(torus) { @@ -353,7 +354,7 @@ int fieldval_uniq(cell *c) { return gmod(p.first * torusconfig::dx + p.second * torusconfig::dy, torusconfig::qty); } else if(binarytiling || archimedean) return 0; - if(ctof(c) || gp::on || irr::on) return c->master->fieldval/S7; + else if(ctof(c) || gp::on || irr::on) return c->master->fieldval/S7; else { int z = 0; for(int u=0; u