mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 05:52:59 +00:00 
			
		
		
		
	tes:: split get_adj into two functions, one with connection specified (inlcuding mirror), and one not
This commit is contained in:
		| @@ -1255,7 +1255,7 @@ void connection_debugger() { | |||||||
|      |      | ||||||
|     dialog::add_action([k, last, con] { |     dialog::add_action([k, last, con] { | ||||||
|       if(euclid) cgflags |= qAFFINE; |       if(euclid) cgflags |= qAFFINE; | ||||||
|       debug_polys.emplace_back(last.first * get_adj(debugged, last.second, k, -1, -1), con.sid); |       debug_polys.emplace_back(last.first * get_adj(debugged, last.second, k), con.sid); | ||||||
|       if(euclid) cgflags &= ~qAFFINE; |       if(euclid) cgflags &= ~qAFFINE; | ||||||
|       }); |       }); | ||||||
|      |      | ||||||
| @@ -1319,17 +1319,13 @@ EX bool apeirogon_consistent_coloring = true; | |||||||
| EX bool apeirogon_hide_grid_edges = true; | EX bool apeirogon_hide_grid_edges = true; | ||||||
| EX bool apeirogon_simplified_display = false; | EX bool apeirogon_simplified_display = false; | ||||||
|  |  | ||||||
| EX transmatrix get_adj(arbi_tiling& c, int t, int dl, int t1, int xdl) { | /** get the adj matrix corresponding to the connection of (t,dl) to connection_t{t1, xdl, xmirror} */ | ||||||
|  | EX transmatrix get_adj(arbi_tiling& c, int t, int dl, int t1, int xdl, bool xmirror) { | ||||||
|  |  | ||||||
|   auto& sh = c.shapes[t]; |   auto& sh = c.shapes[t]; | ||||||
|    |    | ||||||
|   int dr = gmod(dl+1, sh.size()); |   int dr = gmod(dl+1, sh.size()); | ||||||
|  |  | ||||||
|   auto& co = sh.connections[dl]; |  | ||||||
|   if(xdl == -1) xdl = co.eid; |  | ||||||
|  |  | ||||||
|   if(t1 == -1) t1 = co.sid; |  | ||||||
|  |  | ||||||
|   auto& xsh = c.shapes[t1]; |   auto& xsh = c.shapes[t1]; | ||||||
|   int xdr = gmod(xdl+1, xsh.size()); |   int xdr = gmod(xdl+1, xsh.size()); | ||||||
|  |  | ||||||
| @@ -1359,10 +1355,10 @@ EX transmatrix get_adj(arbi_tiling& c, int t, int dl, int t1, int xdl) { | |||||||
|     Res = Res * Tsca; |     Res = Res * Tsca; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   if(co.mirror) Res = Res * MirrorX; |   if(xmirror) Res = Res * MirrorX; | ||||||
|   Res = Res * spintox(xrm*xvl) * xrm; |   Res = Res * spintox(xrm*xvl) * xrm; | ||||||
|    |    | ||||||
|   if(co.mirror) swap(vl, vr); |   if(xmirror) swap(vl, vr); | ||||||
|    |    | ||||||
|   if(hdist(vl, Res*xvr) + hdist(vr, Res*xvl) > .1 && !c.is_combinatorial) { |   if(hdist(vl, Res*xvr) + hdist(vr, Res*xvl) > .1 && !c.is_combinatorial) { | ||||||
|     println(hlog, "s1 = ", kz(spintox(rm*vr)), " s2 = ", kz(rspintox(xrm*xvr)));     |     println(hlog, "s1 = ", kz(spintox(rm*vr)), " s2 = ", kz(rspintox(xrm*xvr)));     | ||||||
| @@ -1374,6 +1370,13 @@ EX transmatrix get_adj(arbi_tiling& c, int t, int dl, int t1, int xdl) { | |||||||
|   return Res; |   return Res; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | /** get the adj matrix corresponding to the connection of (t,dl) -- note: it may be incorrect for rotated/symmetric connections */ | ||||||
|  | EX transmatrix get_adj(arbi_tiling& c, int t, int dl) { | ||||||
|  |   auto& sh = c.shapes[t]; | ||||||
|  |   auto& co = sh.connections[dl]; | ||||||
|  |   return get_adj(c, t, dl, co.sid, co.eid, co.mirror); | ||||||
|  |   } | ||||||
|  |  | ||||||
| struct hrmap_arbi : hrmap { | struct hrmap_arbi : hrmap { | ||||||
|   heptagon *origin; |   heptagon *origin; | ||||||
|   heptagon *getOrigin() override { return origin; } |   heptagon *getOrigin() override { return origin; } | ||||||
| @@ -1415,7 +1418,10 @@ struct hrmap_arbi : hrmap { | |||||||
|   void verify() override { } |   void verify() override { } | ||||||
|  |  | ||||||
|   transmatrix adj(heptagon *h, int dl) override {  |   transmatrix adj(heptagon *h, int dl) override {  | ||||||
|     return get_adj(current_or_slided(), id_of(h), dl, -1, h->c.move(dl) ? h->c.spin(dl) : -1); |     if(h->c.move(dl)) | ||||||
|  |       return get_adj(current_or_slided(), id_of(h), dl, id_of(h->c.move(dl)), h->c.spin(dl), h->c.mirror(dl)); | ||||||
|  |     else | ||||||
|  |       return get_adj(current_or_slided(), id_of(h), dl); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   heptagon *create_step(heptagon *h, int d) override { |   heptagon *create_step(heptagon *h, int d) override { | ||||||
|   | |||||||
| @@ -505,8 +505,8 @@ void geometry_information::generate_floorshapes_for(int id, cell *c, int siid, i | |||||||
|         hyperpoint next = actual[j<cor-1?j+1:0]; |         hyperpoint next = actual[j<cor-1?j+1:0]; | ||||||
|  |  | ||||||
|         if(apeirogonal) { |         if(apeirogonal) { | ||||||
|           if(j == 0) last = arb::get_adj(arb::current_or_slided(), id, cor-1, id, cor-2) * actual[cor-3]; |           if(j == 0) last = arb::get_adj(arb::current_or_slided(), id, cor-1, id, cor-2, false) * actual[cor-3]; | ||||||
|           if(j == cor-2) next = arb::get_adj(arb::current_or_slided(), id, cor-2, id, cor-1) * actual[1]; |           if(j == cor-2) next = arb::get_adj(arb::current_or_slided(), id, cor-2, id, cor-1, false) * actual[1]; | ||||||
|           if(j == cor-1) { cornerlist.push_back(sh.vertices.back()); continue; } |           if(j == cor-1) { cornerlist.push_back(sh.vertices.back()); continue; } | ||||||
|           } |           } | ||||||
|  |  | ||||||
| @@ -645,7 +645,7 @@ void geometry_information::generate_floorshapes_for(int id, cell *c, int siid, i | |||||||
|           int id = arb::id_of(c->master); |           int id = arb::id_of(c->master); | ||||||
|           auto &ac = arb::current_or_slided(); |           auto &ac = arb::current_or_slided(); | ||||||
|           auto& sh = ac.shapes[id]; |           auto& sh = ac.shapes[id]; | ||||||
|           hpcpush(arb::get_adj(arb::current_or_slided(), id, cor-2, id, cor-1) * starting_point); |           hpcpush(arb::get_adj(arb::current_or_slided(), id, cor-2, id, cor-1, false) * starting_point); | ||||||
|           finish_apeirogon(sh.vertices.back()); |           finish_apeirogon(sh.vertices.back()); | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -464,7 +464,10 @@ struct hrmap_arbi_full : hrmap { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|   transmatrix adj(heptagon *h, int dl) override {  |   transmatrix adj(heptagon *h, int dl) override {  | ||||||
|     return arb::get_adj(arb::current_or_slided(), arb::id_of(h), dl, h->c.move(dl) ? arb::id_of(h->c.move(dl)) : -1,  h->c.move(dl) ? h->c.spin(dl) : -1); |     if(h->c.move(dl)) | ||||||
|  |       return arb::get_adj(arb::current_or_slided(), arb::id_of(h), dl, arb::id_of(h->c.move(dl)), h->c.spin(dl), h->c.mirror(dl)); | ||||||
|  |     else | ||||||
|  |       return arb::get_adj(arb::current_or_slided(), arb::id_of(h), dl); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   ld spin_angle(cell *c, int d) override { return SPIN_NOT_AVAILABLE; } |   ld spin_angle(cell *c, int d) override { return SPIN_NOT_AVAILABLE; } | ||||||
|   | |||||||
| @@ -2302,7 +2302,7 @@ struct hrmap_rulegen : hrmap { | |||||||
|    |    | ||||||
|   transmatrix adj(heptagon *h, int dir) override { |   transmatrix adj(heptagon *h, int dir) override { | ||||||
|     if(h->fieldval == -1) |     if(h->fieldval == -1) | ||||||
|       return arb::get_adj(arb::current_or_slided(), h->zebraval, dir, -1, -1); |       return arb::get_adj(arb::current_or_slided(), h->zebraval, dir); | ||||||
|  |  | ||||||
|     int s = h->fieldval; |     int s = h->fieldval; | ||||||
|     int dir0 = get_arb_dir(s, dir); |     int dir0 = get_arb_dir(s, dir); | ||||||
| @@ -2316,7 +2316,7 @@ struct hrmap_rulegen : hrmap { | |||||||
|       sid1 = treestates[s1].sid; |       sid1 = treestates[s1].sid; | ||||||
|       } |       } | ||||||
|  |  | ||||||
|     return arb::get_adj(arb::current_or_slided(), treestates[s].sid, dir0, sid1, dir1); |     return arb::get_adj(arb::current_or_slided(), treestates[s].sid, dir0, sid1, dir1, false); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   int shvid(cell *c) override { |   int shvid(cell *c) override { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue