mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-30 21:42:59 +00:00 
			
		
		
		
	header cleanup: rug
This commit is contained in:
		| @@ -2,7 +2,7 @@ namespace hr { | ||||
| #if CAP_SHAPES | ||||
|  | ||||
| EX vector<basic_textureinfo> floor_texture_vertices; | ||||
| EX renderbuffer *floor_textures; | ||||
| EX struct renderbuffer *floor_textures; | ||||
|  | ||||
| void geometry_information::init_floorshapes() { | ||||
|   all_escher_floorshapes.clear(); | ||||
|   | ||||
							
								
								
									
										6
									
								
								game.cpp
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								game.cpp
									
									
									
									
									
								
							| @@ -2142,7 +2142,7 @@ EX void killMonster(cell *c, eMonster who, flagtype deathflags IS(0)) { | ||||
|   int pcount = fallanim ? 0 : 16;  | ||||
|   if(m == moShadow) return; | ||||
|  | ||||
| #ifdef HASLINEVIEW | ||||
| #if CAP_HISTORY | ||||
|   if(!isBug(m) && !isAnyIvy(m)) { | ||||
|     history::killhistory.push_back(make_pair(c,m)); | ||||
|     } | ||||
| @@ -7286,7 +7286,7 @@ EX bool collectItem(cell *c2, bool telekinesis IS(false)) { | ||||
|     } | ||||
|    | ||||
|   if(dopickup && c2->item) { | ||||
| #ifdef HASLINEVIEW | ||||
| #if CAP_HISTORY | ||||
|     // temporary variable to avoid the "cannot bind bitfield" problem in C++11 | ||||
|     eItem dummy = c2->item; | ||||
|     history::findhistory.emplace_back(c2, dummy); | ||||
| @@ -7776,7 +7776,7 @@ EX void monstersTurn() { | ||||
|   if(canmove) elec::checklightningfast(); | ||||
|  | ||||
|  | ||||
| #ifdef HASLINEVIEW | ||||
| #if CAP_HISTORY | ||||
|   for(int i=0; i<numplayers(); i++) | ||||
|     if(multi::playerActive(i)) | ||||
|       history::movehistory.push_back(playerpos(i)); | ||||
|   | ||||
							
								
								
									
										112
									
								
								hyper.h
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								hyper.h
									
									
									
									
									
								
							| @@ -952,118 +952,6 @@ namespace mapeditor { | ||||
|   void map_settings(); | ||||
|   } | ||||
|  | ||||
| struct renderbuffer; | ||||
|  | ||||
| namespace rug { | ||||
|   extern bool display_warning; | ||||
|   extern bool rugged; | ||||
|   extern bool spatial_rug; | ||||
|   extern bool computed; | ||||
|   extern bool renderonce; | ||||
|   extern bool rendernogl; | ||||
|   extern int  texturesize; | ||||
|   extern ld   model_distance; | ||||
|   extern ld   modelscale; | ||||
|   extern transmatrix currentrot; | ||||
| #if CAP_RUG | ||||
|   void show(); | ||||
|   // initialize both the texture and the model | ||||
|   void init(); | ||||
|   // initialize only the texture (assume model already initialized) | ||||
|   void reopen(); | ||||
|   // close the rug mode, remove the texture | ||||
|   void close(); | ||||
|   // clear the model | ||||
|   void clear_model(); | ||||
|   void actDraw(); | ||||
|   void select(); | ||||
|   void buildVertexInfo(cell *c, transmatrix V); | ||||
|   void drawRugScene(); | ||||
|   void prepareTexture(); | ||||
|   void drawRugScene(); | ||||
|   void push_all_points(int coord, ld val); | ||||
|   void apply_rotation(const transmatrix& t); | ||||
|   string makehelp(); | ||||
|  | ||||
|   struct edge { | ||||
|     struct rugpoint *target; | ||||
|     ld len; | ||||
|     }; | ||||
|    | ||||
|   struct dexp_data { | ||||
|     hyperpoint params; | ||||
|     hyperpoint cont; | ||||
|     ld remaining_distance; | ||||
|     }; | ||||
|  | ||||
|   struct rugpoint { | ||||
|     double x1, y1; | ||||
|     bool valid; | ||||
|     bool inqueue; | ||||
|     double dist; | ||||
|     hyperpoint h;    // point in the represented space | ||||
|     hyperpoint flat; // point in the native space, in azeq | ||||
|     hyperpoint precompute; | ||||
|     vector<edge> edges; | ||||
|     vector<edge> anticusp_edges; | ||||
|     // Find-Union algorithm | ||||
|     rugpoint *glue; | ||||
|     rugpoint *getglue() { | ||||
|       return glue ? (glue = glue->getglue()) : this; | ||||
|       } | ||||
|     hyperpoint& glueflat() { | ||||
|       return glue->flat; | ||||
|       } | ||||
|     rugpoint() { glue = NULL; } | ||||
|     void glueto(rugpoint *x) { | ||||
|       x = x->getglue(); | ||||
|       auto y = getglue(); | ||||
|       if(x != y) y->glue = x; | ||||
|       } | ||||
|     int dexp_id; | ||||
|     dexp_data surface_point; | ||||
|     }; | ||||
|  | ||||
|   struct triangle { | ||||
|     rugpoint *m[3]; | ||||
|     triangle(rugpoint *m1, rugpoint *m2, rugpoint *m3) { | ||||
|       m[0] = m1; m[1] = m2; m[2] = m3; | ||||
|       } | ||||
|     }; | ||||
|  | ||||
|   extern vector<rugpoint*> points; | ||||
|   extern vector<triangle> triangles; | ||||
|  | ||||
|   extern int qvalid; | ||||
|   extern bool subdivide_further(); | ||||
|   extern void subdivide(); | ||||
|   extern bool good_shape; | ||||
|   extern int vertex_limit; | ||||
|   extern void enqueue(rugpoint *p); | ||||
|   void sort_rug_points(); | ||||
|   extern bool rug_perspective; | ||||
|    | ||||
|   bool handlekeys(int sym, int uni); | ||||
|  | ||||
|   void addTriangle(rugpoint *t1, rugpoint *t2, rugpoint *t3, ld len = 1); | ||||
|   rugpoint *addRugpoint(hyperpoint h, double dist); | ||||
|   void buildRug(); | ||||
|  | ||||
|   bool in_crystal(); | ||||
|   void physics(); | ||||
|  | ||||
| extern renderbuffer *glbuf;  | ||||
| extern eGeometry gwhere; | ||||
| extern bool no_fog; | ||||
| extern ld lowrug, hirug, ruggospeed; | ||||
| extern GLuint alternate_texture; | ||||
| extern bool invert_depth; | ||||
| extern ld ruggo; | ||||
| #endif | ||||
|   } | ||||
|  | ||||
| #define HASLINEVIEW | ||||
|  | ||||
| // passable flags | ||||
|  | ||||
| #define SAGEMELT .1 | ||||
|   | ||||
							
								
								
									
										186
									
								
								rug.cpp
									
									
									
									
									
								
							
							
						
						
									
										186
									
								
								rug.cpp
									
									
									
									
									
								
							| @@ -10,65 +10,113 @@ namespace hr { | ||||
| #define TEXTURESIZE (texturesize) | ||||
| #define HTEXTURESIZE (texturesize/2) | ||||
|  | ||||
| bool rug_failure = false; | ||||
| EX bool rug_failure = false; | ||||
|  | ||||
| namespace rug { | ||||
| EX namespace rug { | ||||
|  | ||||
| ld lwidth = 2; | ||||
| EX ld lwidth = 2; | ||||
|  | ||||
| bool in_crystal() { return surface::sh == surface::dsCrystal; } | ||||
| EX bool in_crystal() { return surface::sh == surface::dsCrystal; } | ||||
|  | ||||
| bool computed = false; | ||||
|  | ||||
| vector<rugpoint*> points; | ||||
| vector<triangle> triangles; | ||||
| #if HDR | ||||
|   struct edge { | ||||
|     struct rugpoint *target; | ||||
|     ld len; | ||||
|     }; | ||||
|    | ||||
|   struct dexp_data { | ||||
|     hyperpoint params; | ||||
|     hyperpoint cont; | ||||
|     ld remaining_distance; | ||||
|     }; | ||||
|  | ||||
|   struct rugpoint { | ||||
|     double x1, y1; | ||||
|     bool valid; | ||||
|     bool inqueue; | ||||
|     double dist; | ||||
|     hyperpoint h;    // point in the represented space | ||||
|     hyperpoint flat; // point in the native space, in azeq | ||||
|     hyperpoint precompute; | ||||
|     vector<edge> edges; | ||||
|     vector<edge> anticusp_edges; | ||||
|     // Find-Union algorithm | ||||
|     rugpoint *glue; | ||||
|     rugpoint *getglue() { | ||||
|       return glue ? (glue = glue->getglue()) : this; | ||||
|       } | ||||
|     hyperpoint& glueflat() { | ||||
|       return glue->flat; | ||||
|       } | ||||
|     rugpoint() { glue = NULL; } | ||||
|     void glueto(rugpoint *x) { | ||||
|       x = x->getglue(); | ||||
|       auto y = getglue(); | ||||
|       if(x != y) y->glue = x; | ||||
|       } | ||||
|     int dexp_id; | ||||
|     dexp_data surface_point; | ||||
|     }; | ||||
|  | ||||
|   struct triangle { | ||||
|     rugpoint *m[3]; | ||||
|     triangle(rugpoint *m1, rugpoint *m2, rugpoint *m3) { | ||||
|       m[0] = m1; m[1] = m2; m[2] = m3; | ||||
|       } | ||||
|     }; | ||||
| #endif | ||||
|  | ||||
| EX vector<rugpoint*> points; | ||||
| EX vector<triangle> triangles; | ||||
|  | ||||
| int when_enabled; | ||||
|  | ||||
| struct rug_exception { }; | ||||
|  | ||||
| bool fast_euclidean = true; | ||||
| bool good_shape; | ||||
| bool subdivide_first = false; | ||||
| bool spatial_rug = false; | ||||
| EX bool fast_euclidean = true; | ||||
| EX bool good_shape; | ||||
| EX bool subdivide_first = false; | ||||
| EX bool spatial_rug = false; | ||||
|  | ||||
| bool subdivide_further(); | ||||
| void subdivide(); | ||||
| EX bool subdivide_further(); | ||||
| EX void subdivide(); | ||||
|  | ||||
| ld modelscale = 1; | ||||
| ld model_distance = 4; | ||||
| EX ld modelscale = 1; | ||||
| EX ld model_distance = 4; | ||||
|  | ||||
| eGeometry gwhere = gEuclid; | ||||
| EX eGeometry gwhere = gEuclid; | ||||
|  | ||||
| #define USING_NATIVE_GEOMETRY dynamicval<eGeometry> gw(geometry, gwhere == gElliptic ? gSphere : gwhere) | ||||
|  | ||||
| // hypersian rug datatypes and globals | ||||
| //------------------------------------- | ||||
|  | ||||
| bool rugged = false; | ||||
| EX bool rugged = false; | ||||
| bool genrug = false; | ||||
|  | ||||
| int vertex_limit = 20000; | ||||
| EX int vertex_limit = 20000; | ||||
|  | ||||
| bool renderonce  = false; | ||||
| int renderlate  = 0; | ||||
| bool rendernogl  = false; | ||||
| int  texturesize = 1024; | ||||
| ld scale = 1; | ||||
| ld ruggo = 0; | ||||
| EX bool renderonce  = false; | ||||
| EX int renderlate  = 0; | ||||
| EX bool rendernogl  = false; | ||||
| EX int  texturesize = 1024; | ||||
| EX ld scale = 1; | ||||
| EX ld ruggo = 0; | ||||
|  | ||||
| ld anticusp_factor = 1; | ||||
| ld anticusp_dist; | ||||
| EX ld anticusp_factor = 1; | ||||
| EX ld anticusp_dist; | ||||
|  | ||||
| ld err_zero = 1e-3, err_zero_current, current_total_error; | ||||
| EX ld err_zero = 1e-3, err_zero_current, current_total_error; | ||||
|  | ||||
| int queueiter, qvalid, dt; | ||||
|  | ||||
| rugpoint *finger_center; | ||||
| ld finger_range = .1; | ||||
| ld finger_force = 1; | ||||
| EX rugpoint *finger_center; | ||||
| EX ld finger_range = .1; | ||||
| EX ld finger_force = 1; | ||||
|  | ||||
| int rugdim; | ||||
| EX int rugdim; | ||||
|  | ||||
| bool rug_perspective = ISANDROID; | ||||
|  | ||||
| @@ -183,7 +231,7 @@ void push_all_points(int coord, ld val) { | ||||
|  | ||||
| int hyprand; | ||||
|  | ||||
| rugpoint *addRugpoint(hyperpoint h, double dist) { | ||||
| EX rugpoint *addRugpoint(hyperpoint h, double dist) { | ||||
|   rugpoint *m = new rugpoint; | ||||
|   m->h = h; | ||||
|    | ||||
| @@ -289,13 +337,13 @@ rugpoint *addRugpoint(hyperpoint h, double dist) { | ||||
|   return m; | ||||
|   } | ||||
|  | ||||
| rugpoint *findRugpoint(hyperpoint h) { | ||||
| EX rugpoint *findRugpoint(hyperpoint h) { | ||||
|   for(int i=0; i<isize(points); i++)  | ||||
|     if(sqhypot_d(rugdim, points[i]->h - h) < 1e-5) return points[i]; | ||||
|   return NULL; | ||||
|   } | ||||
|  | ||||
| rugpoint *findOrAddRugpoint(hyperpoint h, double dist) { | ||||
| EX rugpoint *findOrAddRugpoint(hyperpoint h, double dist) { | ||||
|   rugpoint *r = findRugpoint(h); | ||||
|   return r ? r : addRugpoint(h, dist); | ||||
|   } | ||||
| @@ -306,7 +354,7 @@ void addNewEdge(rugpoint *e1, rugpoint *e2, ld len = 1) { | ||||
|   e.target = e1; e2->edges.push_back(e); | ||||
|   } | ||||
|  | ||||
| bool edge_exists(rugpoint *e1, rugpoint *e2) { | ||||
| EX bool edge_exists(rugpoint *e1, rugpoint *e2) { | ||||
|   for(auto& e: e1->edges) | ||||
|     if(e.target == e2) | ||||
|       return true; | ||||
| @@ -326,7 +374,7 @@ void add_anticusp_edge(rugpoint *e1, rugpoint *e2, ld len = 1) { | ||||
|   e.target = e1; e2->anticusp_edges.push_back(e); | ||||
|   } | ||||
|  | ||||
| void addTriangle(rugpoint *t1, rugpoint *t2, rugpoint *t3, ld len) { | ||||
| EX void addTriangle(rugpoint *t1, rugpoint *t2, rugpoint *t3, ld len IS(1)) { | ||||
|   addEdge(t1->getglue(), t2->getglue(), len);  | ||||
|   addEdge(t2->getglue(), t3->getglue(), len);  | ||||
|   addEdge(t3->getglue(), t1->getglue(), len); | ||||
| @@ -374,7 +422,7 @@ void calcparam_rug() { | ||||
|   cd->radius = cd->scrsize * vid.scale; | ||||
|   } | ||||
|  | ||||
| void buildTorusRug() { | ||||
| EX void buildTorusRug() { | ||||
|   using namespace torusconfig; | ||||
|  | ||||
|   calcparam_rug(); | ||||
| @@ -581,7 +629,7 @@ void buildTorusRug() { | ||||
|   return; | ||||
|   } | ||||
|  | ||||
| void verify() { | ||||
| EX void verify() { | ||||
|   vector<ld> ratios; | ||||
|   for(auto m: points) | ||||
|     for(auto& e: m->edges) { | ||||
| @@ -613,7 +661,7 @@ void comp(cell*& minimum, cell *next) { | ||||
|     minimum = next; | ||||
|   } | ||||
|  | ||||
| void buildRug() { | ||||
| EX void buildRug() { | ||||
|  | ||||
|   need_mouseh = true; | ||||
|   good_shape = false; | ||||
| @@ -746,7 +794,7 @@ bool force(rugpoint& m1, rugpoint& m2, double rd, bool is_anticusp=false, double | ||||
|  | ||||
| vector<pair<ld, rugpoint*> > preset_points; | ||||
|  | ||||
| void preset(rugpoint *m) { | ||||
| EX void preset(rugpoint *m) { | ||||
|   if(DIM == 3) return; | ||||
|   int q = 0; | ||||
|   hyperpoint h; | ||||
| @@ -819,7 +867,7 @@ ld sse(const hyperpoint& h) { | ||||
|   return sse; | ||||
|   } | ||||
|  | ||||
| void optimize(rugpoint *m, bool do_preset) { | ||||
| EX void optimize(rugpoint *m, bool do_preset) { | ||||
|  | ||||
|   if(do_preset) { | ||||
|     preset(m); | ||||
| @@ -847,13 +895,13 @@ void optimize(rugpoint *m, bool do_preset) { | ||||
| int divides = 0; | ||||
| bool stop = false; | ||||
|  | ||||
| bool subdivide_further() { | ||||
| EX bool subdivide_further() { | ||||
|   if(fulltorus) return false; | ||||
|   if(DIM == 3) return false; | ||||
|   return isize(points) * 4 < vertex_limit; | ||||
|   } | ||||
|  | ||||
| void subdivide() { | ||||
| EX void subdivide() { | ||||
|   int N = isize(points); | ||||
|   // if(euclid && gwhere == gEuclid) return; | ||||
|   if(!subdivide_further()) { | ||||
| @@ -905,7 +953,7 @@ void subdivide() { | ||||
|   println(hlog, "result ", make_tuple(isize(points), isize(triangles))); | ||||
|   } | ||||
|  | ||||
| ld slow_modeldist(const hyperpoint& h1, const hyperpoint& h2) { | ||||
| EX ld slow_modeldist(const hyperpoint& h1, const hyperpoint& h2) { | ||||
|   normalizer n(h1, h2); | ||||
|   hyperpoint f1 = n(h1); | ||||
|   hyperpoint f2 = n(h2); | ||||
| @@ -923,7 +971,7 @@ hyperpoint4 azeq_to_4(const hyperpoint& h) { | ||||
|   return res; | ||||
|   } | ||||
|  | ||||
| ld modeldist(const hyperpoint& h1, const hyperpoint& h2) { | ||||
| EX ld modeldist(const hyperpoint& h1, const hyperpoint& h2) { | ||||
|   if(gwhere == gSphere) { | ||||
|     hyperpoint4 coord[2] = { azeq_to_4(h1), azeq_to_4(h2) }; | ||||
|     ld edist = 0; | ||||
| @@ -1022,7 +1070,7 @@ int detect_cusps() { | ||||
|   return stats[2]; | ||||
|   } | ||||
|    | ||||
| void addNewPoints() { | ||||
| EX void addNewPoints() { | ||||
|  | ||||
|   if(anticusp_factor && detect_cusps()) | ||||
|     return; | ||||
| @@ -1052,7 +1100,7 @@ void addNewPoints() { | ||||
|   if(qvalid != oqvalid) { println(hlog, "adding new points ", make_tuple(oqvalid, qvalid, isize(points), dist, dt, queueiter)); } | ||||
|   } | ||||
|  | ||||
| void physics() { | ||||
| EX void physics() { | ||||
|  | ||||
|   #if CAP_CRYSTAL | ||||
|   if(in_crystal()) { | ||||
| @@ -1274,9 +1322,9 @@ void drawTriangle(triangle& t) { | ||||
|     (num==3?ct_array:cp_array).emplace_back(h[i], t.m[i]->x1, t.m[i]->y1, col); | ||||
|   } | ||||
|  | ||||
| renderbuffer *glbuf; | ||||
| EX struct renderbuffer *glbuf; | ||||
|  | ||||
| void prepareTexture() { | ||||
| EX void prepareTexture() { | ||||
|   resetbuffer rb; | ||||
|    | ||||
|   dynamicval<eStereo> d(vid.stereo_mode, sOFF); | ||||
| @@ -1313,15 +1361,15 @@ void prepareTexture() { | ||||
|  | ||||
| double xview, yview; | ||||
|  | ||||
| bool no_fog; | ||||
| EX bool no_fog; | ||||
|  | ||||
| ld lowrug = 1e-2, hirug = 1e3; | ||||
| EX ld lowrug = 1e-2, hirug = 1e3; | ||||
|  | ||||
| GLuint alternate_texture; | ||||
|  | ||||
| bool invert_depth; | ||||
|  | ||||
| void drawRugScene() { | ||||
| EX void drawRugScene() { | ||||
|   glbuf->use_as_texture(); | ||||
|   if(alternate_texture) | ||||
|     glBindTexture( GL_TEXTURE_2D, alternate_texture); | ||||
| @@ -1427,9 +1475,9 @@ void drawRugScene() { | ||||
| // organization | ||||
| //-------------- | ||||
|  | ||||
| transmatrix currentrot; | ||||
| EX transmatrix currentrot; | ||||
|      | ||||
| void reopen() { | ||||
| EX void reopen() { | ||||
|   if(rugged) return; | ||||
|   rugdim = 2 * DIM - 1; | ||||
|   when_enabled = ticks; | ||||
| @@ -1445,9 +1493,9 @@ void reopen() { | ||||
|   if(!rugged) return; | ||||
|   } | ||||
|  | ||||
| bool display_warning = true; | ||||
| EX bool display_warning = true; | ||||
|  | ||||
| void init_model() { | ||||
| EX void init_model() { | ||||
|   clear_model(); | ||||
|   genrug = true; | ||||
|   drawthemap(); | ||||
| @@ -1493,20 +1541,20 @@ void init_model() { | ||||
|     } | ||||
|   } | ||||
|  | ||||
| void init() { | ||||
| EX void init() { | ||||
|   if(dual::state) return; | ||||
|   reopen(); | ||||
|   if(rugged) init_model(); | ||||
|   } | ||||
|  | ||||
| void clear_model() { | ||||
| EX void clear_model() { | ||||
|   triangles.clear(); | ||||
|   for(int i=0; i<isize(points); i++) delete points[i]; | ||||
|   points.clear(); | ||||
|   pqueue = queue<rugpoint*> (); | ||||
|   } | ||||
|    | ||||
| void close() { | ||||
| EX void close() { | ||||
|   if(!rugged) return; | ||||
|   rugged = false; | ||||
|   delete glbuf; | ||||
| @@ -1517,7 +1565,7 @@ int lastticks; | ||||
|  | ||||
| ld protractor = 0; | ||||
|  | ||||
| void apply_rotation(const transmatrix& t) { | ||||
| EX void apply_rotation(const transmatrix& t) { | ||||
|   if(!rug_perspective) currentrot = t * currentrot; | ||||
|   #if CAP_CRYSTAL | ||||
|   if(in_crystal()) crystal::apply_rotation(t); | ||||
| @@ -1526,14 +1574,14 @@ void apply_rotation(const transmatrix& t) { | ||||
|   for(auto p: points) p->flat = t * p->flat; | ||||
|   } | ||||
|  | ||||
| void move_forward(ld distance) { | ||||
| EX void move_forward(ld distance) { | ||||
|   if(rug_perspective) push_all_points(2, distance); | ||||
|   else model_distance /= exp(distance); | ||||
|   } | ||||
|  | ||||
| #define CAP_HOLDKEYS CAP_SDL // && !ISWEB) | ||||
|  | ||||
| bool handlekeys(int sym, int uni) { | ||||
| EX bool handlekeys(int sym, int uni) { | ||||
|   if(NUMBERKEY == '1') { | ||||
|     ld bdist = 1e12; | ||||
|     if(finger_center)  | ||||
| @@ -1591,7 +1639,7 @@ bool handlekeys(int sym, int uni) { | ||||
|   else return false; | ||||
|   } | ||||
|  | ||||
| void finger_on(int coord, ld val) { | ||||
| EX void finger_on(int coord, ld val) { | ||||
|   for(auto p: points) { | ||||
|     ld d = hdist(finger_center->h, p->getglue()->h); | ||||
|     push_point(p->flat, coord, val * finger_force * exp( - sqr(d / finger_range))); | ||||
| @@ -1601,9 +1649,9 @@ void finger_on(int coord, ld val) { | ||||
|  | ||||
| transmatrix last_orientation; | ||||
|  | ||||
| ld ruggospeed = 1; | ||||
| EX ld ruggospeed = 1; | ||||
|  | ||||
| void actDraw() {  | ||||
| EX void actDraw() { | ||||
|   try { | ||||
|  | ||||
|   if(!renderonce) prepareTexture(); | ||||
| @@ -1737,7 +1785,7 @@ void getco_pers(rugpoint *r, hyperpoint& p, int& spherepoints, bool& error) { | ||||
| static const ld RADAR_INF = 1e12; | ||||
| ld radar_distance = RADAR_INF; | ||||
|  | ||||
| hyperpoint gethyper(ld x, ld y) { | ||||
| EX hyperpoint gethyper(ld x, ld y) { | ||||
|   double mx = (x - current_display->xcenter)/vid.xres * 2 * xview; | ||||
|   double my = (current_display->ycenter - y)/vid.yres * 2 * yview; | ||||
|   radar_distance = RADAR_INF; | ||||
| @@ -1795,7 +1843,7 @@ hyperpoint gethyper(ld x, ld y) { | ||||
|   return h; | ||||
|   } | ||||
|  | ||||
| string makehelp() { | ||||
| EX string makehelp() { | ||||
|   return | ||||
|     XLAT( | ||||
|     "In this mode, HyperRogue is played on a 3D model of a part of the hyperbolic plane, " | ||||
| @@ -1813,7 +1861,7 @@ string makehelp() { | ||||
|      ; | ||||
|   } | ||||
|  | ||||
| string geometry_name(eGeometry g) { | ||||
| EX string geometry_name(eGeometry g) { | ||||
|   switch(g) { | ||||
|     case gNormal: return XLAT("hyperbolic"); | ||||
|     case gEuclid: return XLAT("Euclidean"); | ||||
| @@ -1832,7 +1880,7 @@ void change_texturesize() { | ||||
|  | ||||
| ld old_distance; | ||||
|  | ||||
| void show() { | ||||
| EX void show() { | ||||
|   cmode = sm::SIDE | sm::MAYDARK; | ||||
|   gamescreen(0); | ||||
|   dialog::init(XLAT("hypersian rug mode"), iinf[itPalace].color, 150, 100); | ||||
| @@ -2018,7 +2066,7 @@ void show() { | ||||
|     }; | ||||
|   } | ||||
|  | ||||
| void select() { | ||||
| EX void select() { | ||||
|   if(dual::state) return; | ||||
|   pushScreen(rug::show); | ||||
|   } | ||||
|   | ||||
| @@ -488,6 +488,10 @@ union SDL_Event; | ||||
| #define CAP_CRYSTAL CAP_GEOMETRY | ||||
| #endif | ||||
|  | ||||
| #ifndef CAP_HISTORY | ||||
| #define CAP_HISTORY 1 | ||||
| #endif | ||||
|  | ||||
| #ifndef CAP_BT | ||||
| #define CAP_BT CAP_GEOMETRY | ||||
| #endif | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue