mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-30 21:42:59 +00:00 
			
		
		
		
	rogueviz:: recursive-house added
This commit is contained in:
		
							
								
								
									
										110
									
								
								rogueviz/recursive-house.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								rogueviz/recursive-house.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| #include "rogueviz.h" | ||||
|  | ||||
| namespace hr { | ||||
|  | ||||
| namespace recursive_house { | ||||
|  | ||||
| // log(2) / vid.plevel_factor == 1.78379 | ||||
| // 0.38858115616745542 | ||||
|  | ||||
| // commandline for Euclidean animation: | ||||
| // rogueviz -canvas 0 -geo beti -recursive-house -noplayer | ||||
|  | ||||
| // commandline for S2xE | ||||
| // rogueviz -geo 2 -7 -product -prodperiod 1 -canvas 0 -lands 6 -recursive-house -noplayer plevel_factor=0.38858*2 | ||||
|  | ||||
| // (warning: it is quite slow) | ||||
|  | ||||
| bool draw_recursive_house_at(cell *c, const shiftmatrix& V) { | ||||
|   if(c != currentmap->gamestart()) return false; | ||||
|   for(int lv=-10; lv<=10; lv++) { | ||||
|     if(!euclid && lv) continue; | ||||
|     dynamicval<eGeometry> g(geometry, gCubeTiling); | ||||
|     check_cgi(); | ||||
|     cgi.require_shapes(); | ||||
|  | ||||
|     auto cube = [&] (ld x, ld y, ld z, color_t wal, ld s = 1) { | ||||
|       for(int i=0; i<6; i++) { | ||||
|         auto& p = cgi.shWall3D[i]; | ||||
|         for(int j=p.s; j<p.e; j++) { | ||||
|           hyperpoint h = cgi.hpc[j]; | ||||
|           h[0] *= s; | ||||
|           h[1] *= s; | ||||
|           h[2] *= s; | ||||
|           h[0] += x-3.5; | ||||
|           h[1] += y-3.5; | ||||
|           h[2] += z-3.5; | ||||
|           h *= exp(lv * log(4)); | ||||
|           h[3] = 1; | ||||
|           curvepoint(h); | ||||
|           } | ||||
|         auto& c = queuecurve(V, 0, wal, PPR::WALL); | ||||
|         c.flags |= POLY_TRIANGLES; | ||||
|         c.tinf = &floor_texture_vertices[cgi.shStarFloor.id]; | ||||
|         ensure_vertex_number(*c.tinf, c.cnt); | ||||
|         c.offset_texture = p.texture_offset; | ||||
|         } | ||||
|       }; | ||||
|      | ||||
|     for(int x=0; x<=7; x++) | ||||
|     for(int y=0; y<=7; y++) | ||||
|       cube(x, y, 0, 0x103010FF); | ||||
|  | ||||
|     for(int z=1; z<=2; z++) | ||||
|       cube(3.5, 3.5, z, 0xC0C0C0FF); | ||||
|        | ||||
|     cube(5, 1, 1, 0x202080FF); | ||||
|     cube(5, 1, 2, 0x202060FF); | ||||
|     cube(5, 1, 2.75, 0x202080FF, 0.5); | ||||
|     cube(5, 1, 3.5, 0xC0C020FF); | ||||
|  | ||||
|     cube(2, 6, 1, 0x802080FF); | ||||
|     cube(2, 6, 2, 0x602060FF); | ||||
|     cube(2, 6, 2.75, 0x802080FF, 0.5); | ||||
|     cube(2, 6, 3.5, 0xC0C020FF); | ||||
|  | ||||
|     for(int x: {0, 7}) for(int y: {0, 7})  | ||||
|       for(int z=1; z<=5; z++) | ||||
|         cube(x, y, z, 0xFFD500FF); | ||||
|  | ||||
|     for(int x=0; x<=7; x++) | ||||
|     for(int y=0; y<=7; y++) | ||||
|       cube(x, y, 6 + min(min(x,7-x), min(y, 7-y)), 0x703030FF); | ||||
|        | ||||
|     } | ||||
|   check_cgi(); | ||||
|  | ||||
|   return false; | ||||
|   } | ||||
|  | ||||
| void enable() {  | ||||
|   rogueviz::rv_hook(hooks_drawcell, 100, draw_recursive_house_at); | ||||
|  | ||||
|   if(geometry == gCubeTiling) | ||||
|     rogueviz::rv_hook(anims::hooks_anim, 100, [] {  | ||||
|    | ||||
|       ld t = ticks * 1. / anims::period; | ||||
|       t = frac(t); | ||||
|        | ||||
|       hyperpoint at = point31(1, 0.5, 0.3); | ||||
|       hyperpoint fwd = point31(0, 0, 0); | ||||
|       hyperpoint up = point31(1, 0.5, 1); | ||||
|        | ||||
|       for(auto p: {&at, &fwd, &up}) | ||||
|       for(int i: {0,1,2}) | ||||
|         (*p)[i] *= exp(-t * log(4)); | ||||
|          | ||||
|       set_view(at, fwd, up); | ||||
|        | ||||
|       sightranges[geometry] = exp(-t * log(4)) * 200; | ||||
|       vid.cells_drawn_limit = 50; | ||||
|        | ||||
|       centerover = currentmap->gamestart(); | ||||
|        | ||||
|       anims::moved(); | ||||
|       });         | ||||
|   } | ||||
|  | ||||
| auto house_hook = arg::add3("-recursive-house", enable); | ||||
|  | ||||
| }} | ||||
| @@ -40,6 +40,8 @@ | ||||
|  | ||||
| #include "notknot.cpp" | ||||
|  | ||||
| #include "recursive-house.cpp" | ||||
|  | ||||
| #include "weirdmaze.cpp" | ||||
|  | ||||
| #include "inner-maps.cpp" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue