mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 14:02:59 +00:00 
			
		
		
		
	 ced3bbcad4
			
		
	
	ced3bbcad4
	
	
	
		
			
			C++20 introduces `std::format` and we `using namespace std`, so some of these would be ambiguous in C++20.
		
			
				
	
	
		
			113 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (C) 2018 Zeno and Tehora Rogue, see 'hyper.cpp' for details
 | |
| // this is a plugin which generates branched tilings for newconformist 
 | |
| // https://github.com/zenorogue/newconformist (see the option '-cvl')
 | |
| 
 | |
| #include "../hyper.h"
 | |
| 
 | |
| namespace hr {
 | |
| #if CAP_SHOT
 | |
| 
 | |
| struct location {
 | |
|   transmatrix lView;
 | |
|   cell *lco;
 | |
|   };
 | |
| 
 | |
| struct lineinfo {
 | |
|   vector<location> locs;
 | |
|   int plus_matrices;
 | |
|   int minus_matrices;
 | |
|   };
 | |
| 
 | |
| map<int, lineinfo> lines;
 | |
| 
 | |
| location loc_multiply(location orig, transmatrix T) {
 | |
|   dynamicval<transmatrix> dv(View, orig.lView);
 | |
|   dynamicval<cell*> dc(centerover, orig.lco);
 | |
|   View = inverse(T) * View;
 | |
|   for(int a=0; a<10; a++) optimizeview();
 | |
|   return location{View, centerover};
 | |
|   }
 | |
| 
 | |
| bool show_map = false;
 | |
| 
 | |
| void cvl_marker() {
 | |
|   if(show_map) for(auto& l: lines) {
 | |
|     int id = 0;
 | |
|     for(auto& loc: l.second.locs) {
 | |
|       if(gmatrix.count(loc.lco)) {
 | |
|         shiftmatrix T = gmatrix[loc.lco] * inverse(loc.lView);
 | |
|         queuepoly(T, cgi.shAsymmetric, 0xFF00FFFF);
 | |
|         queuestr(T, 1.0, its(l.first)+"/"+its(id), 0xFFFFFF);
 | |
|         }
 | |
|       id++;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
| int readArgs() {
 | |
|   using namespace arg;
 | |
|            
 | |
|   if(0) ;
 | |
|   else if(argis("-cvlbuild")) {
 | |
|     PHASEFROM(3);
 | |
|     start_game();
 | |
|     shift(); 
 | |
|     fhstream f(argcs(), "rt");
 | |
|     if(!f.f) { shift(); printf("failed to open file\n"); return 0; }
 | |
|     int id;
 | |
|     lineinfo l0;    
 | |
|     scan(f, id, l0.plus_matrices, l0.minus_matrices);
 | |
|     l0.locs.push_back(location{View, centerover});
 | |
|     for(int i=1; i<l0.plus_matrices; i++)
 | |
|       l0.locs.push_back(loc_multiply(l0.locs.back(), xpush(1)));
 | |
|     lines[id] = std::move(l0);
 | |
|     
 | |
|     while(true) {
 | |
|       scan(f, id);
 | |
|       println(hlog, "id=", id, ".");
 | |
|       if(id < 0) break;
 | |
|       auto& l1 = lines[id];
 | |
|       int step;
 | |
|       scan(f, id, step);
 | |
|       transmatrix T;
 | |
|       for(int a=0; a<9; a++) scan(f, T[0][a]);
 | |
|       scan(f, l1.plus_matrices, l1.minus_matrices);
 | |
|       auto old = lines[id].locs[step];
 | |
|       println(hlog, "FROM ", old.lView, old.lco, " id=", id, " step=", step);
 | |
|       l1.locs.push_back(loc_multiply(old, T));
 | |
|       println(hlog, "TO ", l1.locs.back().lView, l1.locs.back().lco, "; creating ", l1.plus_matrices);
 | |
|       for(int i=1; i<l1.plus_matrices; i++)
 | |
|         l1.locs.push_back(loc_multiply(l1.locs.back(), xpush(1)));
 | |
|       println(hlog, "LAST ", l1.locs.back().lView, l1.locs.back().lco);
 | |
|       }
 | |
|     }
 | |
|   else if(argis("-cvllist")) {
 | |
|     for(auto& l: lines)
 | |
|       for(auto& loc: l.second.locs) {
 | |
|         println(hlog, l.first, ". ", loc.lco, " (dist=", celldist(loc.lco), "), View = ", loc.lView);
 | |
|         }
 | |
|     }
 | |
|   else if(argis("-cvlmap")) {
 | |
|     show_map = !show_map;
 | |
|     }
 | |
|   else if(argis("-cvldraw")) {
 | |
|     shift(); string s = args();
 | |
|     for(auto& p: lines) {
 | |
|       int i = 0;
 | |
|       for(auto& loc: p.second.locs) {
 | |
|         dynamicval<transmatrix> dv(View, loc.lView);
 | |
|         dynamicval<cell*> dc(centerover, loc.lco);
 | |
|         shot::take(hr::format(s.c_str(), p.first, i++));
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   else return 1;
 | |
|   return 0;
 | |
|   }
 | |
| 
 | |
| auto magichook = addHook(hooks_args, 100, readArgs) + addHook(hooks_frame, 100, cvl_marker);
 | |
| #endif
 | |
| 
 | |
|  
 | |
| }
 |