mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-05-04 08:14:08 +00:00
nflags can be given for vertex cells too
This commit is contained in:
parent
d5f3c3776a
commit
706fb5d9f8
@ -279,7 +279,7 @@ void archimedean_tiling::regroup() {
|
|||||||
flags.clear();
|
flags.clear();
|
||||||
flags.resize(M);
|
flags.resize(M);
|
||||||
for(int i=0; i<M; i++)
|
for(int i=0; i<M; i++)
|
||||||
for(int j=0; j<2*N; j++) {
|
for(int j=0; j<M; j++) {
|
||||||
if(tilegroup[i] == tilegroup[j]) {
|
if(tilegroup[i] == tilegroup[j]) {
|
||||||
flags[i] |= nflags[j/2];
|
flags[i] |= nflags[j/2];
|
||||||
if(j%2 == 1 && (nflags[j/2] & sfSEMILINE))
|
if(j%2 == 1 && (nflags[j/2] & sfSEMILINE))
|
||||||
@ -288,13 +288,8 @@ void archimedean_tiling::regroup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!have_ph) {
|
if(!have_ph) {
|
||||||
if(true) {
|
|
||||||
for(int i=0; i<M; i++) if(tilegroup[i] == 0) flags[i] |= sfPH;
|
for(int i=0; i<M; i++) if(tilegroup[i] == 0) flags[i] |= sfPH;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
for(int z=2*N; z<2*N+2; z++) flags[z] |= sfPH;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SDEBUG( for(int i=0; i<M; i+=(have_symmetry?1:2)) {
|
SDEBUG( for(int i=0; i<M; i+=(have_symmetry?1:2)) {
|
||||||
printf("tiling group of %2d: [%2d]%2d+Z%2d\n", i, tilegroup[i], groupoffset[i], periods[i]);
|
printf("tiling group of %2d: [%2d]%2d+Z%2d\n", i, tilegroup[i], groupoffset[i], periods[i]);
|
||||||
@ -746,18 +741,20 @@ void archimedean_tiling::parse() {
|
|||||||
faces.clear(); nflags.clear();
|
faces.clear(); nflags.clear();
|
||||||
have_line = false;
|
have_line = false;
|
||||||
have_ph = false;
|
have_ph = false;
|
||||||
|
int nflags0;
|
||||||
|
auto nfback = [this, &nflags0] () -> int& { if(nflags.empty()) return nflags0; else return nflags.back(); };
|
||||||
while(true) {
|
while(true) {
|
||||||
if(peek() == ')' || (peek() == '(' && isize(faces)) || peek() == 0) break;
|
if(peek() == ')' || (peek() == '(' && isize(faces)) || peek() == 0) break;
|
||||||
else if((peek() == 'L') && faces.size()) {
|
else if((peek() == 'L') && faces.size()) {
|
||||||
if(!nflags.empty()) nflags.back() |= sfLINE;
|
if(!nflags.empty()) nfback() |= sfLINE;
|
||||||
have_line = true, at++;
|
have_line = true, at++;
|
||||||
}
|
}
|
||||||
else if((peek() == 'l') && faces.size()) {
|
else if((peek() == 'l') && faces.size()) {
|
||||||
if(!nflags.empty()) nflags.back() |= sfSEMILINE;
|
if(!nflags.empty()) nfback() |= sfSEMILINE;
|
||||||
have_line = true, at++;
|
have_line = true, at++;
|
||||||
}
|
}
|
||||||
else if((peek() == 'H' || peek() == 'h') && faces.size()) {
|
else if((peek() == 'H' || peek() == 'h') && faces.size()) {
|
||||||
if(!nflags.empty()) nflags.back() |= sfPH;
|
if(!nflags.empty()) nfback() |= sfPH;
|
||||||
have_ph = true, at++;
|
have_ph = true, at++;
|
||||||
}
|
}
|
||||||
else if(isnumber()) faces.push_back(read_number()), nflags.push_back(0);
|
else if(isnumber()) faces.push_back(read_number()), nflags.push_back(0);
|
||||||
@ -765,10 +762,11 @@ void archimedean_tiling::parse() {
|
|||||||
at++;
|
at++;
|
||||||
int rep = read_number();
|
int rep = read_number();
|
||||||
if(rep == 0) nflags.pop_back(), faces.pop_back();
|
if(rep == 0) nflags.pop_back(), faces.pop_back();
|
||||||
for(int i=1; i<rep; i++) nflags.push_back(nflags.back()), faces.push_back(faces.back());
|
for(int i=1; i<rep; i++) nflags.push_back(nfback()), faces.push_back(faces.back());
|
||||||
}
|
}
|
||||||
else at++;
|
else at++;
|
||||||
}
|
}
|
||||||
|
nflags.push_back(nflags0);
|
||||||
repetition = 1;
|
repetition = 1;
|
||||||
N = isize(faces);
|
N = isize(faces);
|
||||||
invert.clear(); invert.resize(N, true);
|
invert.clear(); invert.resize(N, true);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user