mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 22:12:59 +00:00 
			
		
		
		
	fixed some distlimit bugs
This commit is contained in:
		| @@ -1499,9 +1499,6 @@ struct hrmap_arbi : hrmap { | |||||||
|     transmatrix T = lxpush(.01241) * spin(1.4117) * lxpush(0.1241) * Id; |     transmatrix T = lxpush(.01241) * spin(1.4117) * lxpush(0.1241) * Id; | ||||||
|     arbi_matrix[origin] = make_pair(alt, T); |     arbi_matrix[origin] = make_pair(alt, T); | ||||||
|     altmap[alt].emplace_back(origin, T); |     altmap[alt].emplace_back(origin, T); | ||||||
|      |  | ||||||
|     if(!current.range) |  | ||||||
|       current.range = auto_compute_range(origin->c7); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   ~hrmap_arbi() { |   ~hrmap_arbi() { | ||||||
| @@ -1999,7 +1996,7 @@ EX void convert() { | |||||||
|   ac.cscale = cgi.scalefactor; |   ac.cscale = cgi.scalefactor; | ||||||
|   ac.boundary_ratio = 1; |   ac.boundary_ratio = 1; | ||||||
|   ac.floor_scale = cgi.hexvdist / cgi.scalefactor; |   ac.floor_scale = cgi.hexvdist / cgi.scalefactor; | ||||||
|   ac.range = cgi.base_distlimit; |   ac.range = getDistLimit(); | ||||||
|   ac.shapes.clear(); |   ac.shapes.clear(); | ||||||
|   ac.shapes.resize(N); |   ac.shapes.resize(N); | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										18
									
								
								cell.cpp
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								cell.cpp
									
									
									
									
									
								
							| @@ -1764,6 +1764,24 @@ EX int auto_compute_range(cell *c) { | |||||||
|   return ginf[geometry].distlimit[0] = cgi.base_distlimit = d; |   return ginf[geometry].distlimit[0] = cgi.base_distlimit = d; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | EX int getDistLimit() { | ||||||
|  |   auto& res = cgi.base_distlimit; | ||||||
|  |   if(res) return res; | ||||||
|  |   if(arb::in() && arb::current.range) | ||||||
|  |     return res = arb::current.range; | ||||||
|  |   if(arcm::in() || arb::in()) { | ||||||
|  |     if(!currentmap) return 0; | ||||||
|  |     cell *c = currentmap->gamestart(); | ||||||
|  |     if(!c) return 0; | ||||||
|  |     return res = auto_compute_range(c); | ||||||
|  |     } | ||||||
|  |   if(mhybrid) | ||||||
|  |     return res = hybrid::in_underlying_geometry([&] { | ||||||
|  |       return max(getDistLimit()-1, 0); | ||||||
|  |       }); | ||||||
|  |   return ginf[geometry].distlimit[!BITRUNCATED]; | ||||||
|  |   } | ||||||
|  |  | ||||||
| EX cell out_of_bounds; | EX cell out_of_bounds; | ||||||
| EX heptagon oob; | EX heptagon oob; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								game.cpp
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								game.cpp
									
									
									
									
									
								
							| @@ -111,8 +111,6 @@ EX eMonster active_switch() { | |||||||
|  |  | ||||||
| EX vector<cell*> crush_now, crush_next; | EX vector<cell*> crush_now, crush_next; | ||||||
|    |    | ||||||
| EX int getDistLimit() { return cgi.base_distlimit; } |  | ||||||
|  |  | ||||||
| EX void activateFlashFrom(cell *cf, eMonster who, flagtype flags); | EX void activateFlashFrom(cell *cf, eMonster who, flagtype flags); | ||||||
|  |  | ||||||
| EX bool saved_tortoise_on(cell *c) { | EX bool saved_tortoise_on(cell *c) { | ||||||
|   | |||||||
| @@ -218,7 +218,7 @@ struct geometry_information { | |||||||
|   /** for 2D geometries */ |   /** for 2D geometries */ | ||||||
|   vector<transmatrix> heptmove, hexmove, invhexmove; |   vector<transmatrix> heptmove, hexmove, invhexmove; | ||||||
|  |  | ||||||
|   int base_distlimit; |   int base_distlimit = 0; | ||||||
|    |    | ||||||
|   unique_ptr<embedding_method> emb; |   unique_ptr<embedding_method> emb; | ||||||
|  |  | ||||||
| @@ -658,7 +658,6 @@ void geometry_information::prepare_basics() { | |||||||
|       t->tessf = cgi.tessf / d; |       t->tessf = cgi.tessf / d; | ||||||
|       t->hexvdist = cgi.hexvdist / d; |       t->hexvdist = cgi.hexvdist / d; | ||||||
|       t->hexhexdist = hdist(xpush0(cgi.hcrossf), xspinpush0(TAU/S7, cgi.hcrossf)) / d; |       t->hexhexdist = hdist(xpush0(cgi.hcrossf), xspinpush0(TAU/S7, cgi.hcrossf)) / d; | ||||||
|       t->base_distlimit = cgi.base_distlimit-1; |  | ||||||
|       }); |       }); | ||||||
|     goto hybrid_finish; |     goto hybrid_finish; | ||||||
|     } |     } | ||||||
| @@ -756,8 +755,6 @@ void geometry_information::prepare_basics() { | |||||||
|     (hr::format("S7=%d S6=%d hexf = " LDF" hcross = " LDF" tessf = " LDF" hexshift = " LDF " hexhex = " LDF " hexv = " LDF "\n", S7, S6, hexf, hcrossf, tessf, hexshift,  |     (hr::format("S7=%d S6=%d hexf = " LDF" hcross = " LDF" tessf = " LDF" hexshift = " LDF " hexhex = " LDF " hexv = " LDF "\n", S7, S6, hexf, hcrossf, tessf, hexshift,  | ||||||
|     hexhexdist, hexvdist)));   |     hexhexdist, hexvdist)));   | ||||||
|    |    | ||||||
|   base_distlimit = ginf[geometry].distlimit[!BITRUNCATED]; |  | ||||||
|  |  | ||||||
|   hybrid_finish: |   hybrid_finish: | ||||||
|    |    | ||||||
|   #if CAP_GP |   #if CAP_GP | ||||||
| @@ -823,7 +820,6 @@ void geometry_information::prepare_basics() { | |||||||
|     scalefactor = csc; |     scalefactor = csc; | ||||||
|     hcrossf = crossf = orbsize = hcrossf7 * csc; |     hcrossf = crossf = orbsize = hcrossf7 * csc; | ||||||
|     hexf = rhexf = hexvdist = csc * arb::current_or_slided().floor_scale; |     hexf = rhexf = hexvdist = csc * arb::current_or_slided().floor_scale; | ||||||
|     base_distlimit = arb::current.range; |  | ||||||
|     } |     } | ||||||
|    |    | ||||||
|   #if MAXMDIM >= 4 |   #if MAXMDIM >= 4 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue