mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-30 05:23:00 +00:00 
			
		
		
		
	nflags can be given for vertex cells too
This commit is contained in:
		| @@ -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); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue