mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-02-20 04:50:10 +00:00
inforder basics
This commit is contained in:
parent
e799f76e5d
commit
b5f6e6f3f5
3
cell.cpp
3
cell.cpp
@ -257,6 +257,7 @@ EX void initcells() {
|
|||||||
#if CAP_BT
|
#if CAP_BT
|
||||||
else if(binarytiling) currentmap = binary::new_map();
|
else if(binarytiling) currentmap = binary::new_map();
|
||||||
#endif
|
#endif
|
||||||
|
else if(S3 >= OINF) currentmap = inforder::new_map();
|
||||||
else currentmap = new hrmap_hyperbolic;
|
else currentmap = new hrmap_hyperbolic;
|
||||||
|
|
||||||
allmaps.push_back(currentmap);
|
allmaps.push_back(currentmap);
|
||||||
@ -1034,6 +1035,8 @@ EX int celldistance(cell *c1, cell *c2) {
|
|||||||
|
|
||||||
return DISTANCE_UNKNOWN;
|
return DISTANCE_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(S3 >= OINF) return inforder::celldistance(c1, c2);
|
||||||
|
|
||||||
#if CAP_BT && MAXMDIM >= 4
|
#if CAP_BT && MAXMDIM >= 4
|
||||||
if(binarytiling && WDIM == 3)
|
if(binarytiling && WDIM == 3)
|
||||||
|
@ -590,8 +590,8 @@ vector<geometryinfo> ginf = {
|
|||||||
{"ternary","none", "standard ternary tiling", "ternary", 6, 3, qBINARY, giHyperb2, 0x48400, {{6, 4}}, eVariation::pure},
|
{"ternary","none", "standard ternary tiling", "ternary", 6, 3, qBINARY, giHyperb2, 0x48400, {{6, 4}}, eVariation::pure},
|
||||||
{"3x2", "none", "stretched hyperbolic", "3:2", 11, 3, qBINARY|qNIH, giSolNIH, 0x49000, {{6, 3}}, eVariation::pure},
|
{"3x2", "none", "stretched hyperbolic", "3:2", 11, 3, qBINARY|qNIH, giSolNIH, 0x49000, {{6, 3}}, eVariation::pure},
|
||||||
{"3x1/2", "none", "stretched Solv", "3:1/2", 9, 3, (qBINARY|qSOL|qNIH), giSolNIH, 0x49200, {{7, 3}}, eVariation::pure},
|
{"3x1/2", "none", "stretched Solv", "3:1/2", 9, 3, (qBINARY|qSOL|qNIH), giSolNIH, 0x49200, {{7, 3}}, eVariation::pure},
|
||||||
|
{"{3,oo}", "none", "{3,∞} (infinite triangles)", "oox3", 3, 100, qIDEAL, giHyperb2, 0x49400, {{7, 7}}, eVariation::pure},
|
||||||
};
|
};
|
||||||
|
|
||||||
// bits: 9, 10, 15, 16, (reserved for later) 17, 18
|
// bits: 9, 10, 15, 16, (reserved for later) 17, 18
|
||||||
|
|
||||||
// remember to match the following mask when specifying codes for extra geometries: 0x78600
|
// remember to match the following mask when specifying codes for extra geometries: 0x78600
|
||||||
|
@ -215,7 +215,7 @@ enum eGeometry {
|
|||||||
gField435, gField534,
|
gField435, gField534,
|
||||||
gBinary4, gSol,
|
gBinary4, gSol,
|
||||||
gKiteDart2, gKiteDart3, gNil, gProduct, gRotSpace,
|
gKiteDart2, gKiteDart3, gNil, gProduct, gRotSpace,
|
||||||
gTernary, gNIH, gSolN,
|
gTernary, gNIH, gSolN, gInfOrder,
|
||||||
gGUARD};
|
gGUARD};
|
||||||
|
|
||||||
enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere, gcSolNIH, gcNil, gcProduct, gcSL2 };
|
enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere, gcSolNIH, gcNil, gcProduct, gcSL2 };
|
||||||
@ -274,6 +274,8 @@ static const flagtype qSOL = 16384;
|
|||||||
static const flagtype qEXPERIMENTAL = 32768;
|
static const flagtype qEXPERIMENTAL = 32768;
|
||||||
static const flagtype qNIH = 65536;
|
static const flagtype qNIH = 65536;
|
||||||
|
|
||||||
|
static const flagtype qIDEAL = 131072;
|
||||||
|
|
||||||
// note: dnext assumes that x&7 equals 7
|
// note: dnext assumes that x&7 equals 7
|
||||||
static const int SEE_ALL = 50;
|
static const int SEE_ALL = 50;
|
||||||
static const int FORBIDDEN = -1;
|
static const int FORBIDDEN = -1;
|
||||||
@ -352,4 +354,6 @@ struct modelinfo {
|
|||||||
|
|
||||||
extern std::vector<modelinfo> mdinf;
|
extern std::vector<modelinfo> mdinf;
|
||||||
|
|
||||||
|
static const int OINF = 100;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -484,7 +484,7 @@ void geometry_information::prepare_basics() {
|
|||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
tessf = edge_of_triangle_with_angles(2*M_PI/S3, M_PI/S7, M_PI/S7);
|
tessf = edge_of_triangle_with_angles(S3 >= OINF ? 0 : 2*M_PI/S3, M_PI/S7, M_PI/S7);
|
||||||
|
|
||||||
if(elliptic && S7 == 4) tessf = M_PI/2;
|
if(elliptic && S7 == 4) tessf = M_PI/2;
|
||||||
|
|
||||||
|
@ -52,6 +52,10 @@ EX hstate transition(hstate s, int dir) {
|
|||||||
if(s == hsB && (dir >= 2 && dir < S7-2)) return hsA;
|
if(s == hsB && (dir >= 2 && dir < S7-2)) return hsA;
|
||||||
if(s == hsB && (dir == S7-2)) return hsB;
|
if(s == hsB && (dir == S7-2)) return hsB;
|
||||||
}
|
}
|
||||||
|
else if(S3 >= OINF) {
|
||||||
|
if(s == hsOrigin) return hsA;
|
||||||
|
if(s == hsA && dir) return hsA;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
if(s == hsOrigin) return hsA;
|
if(s == hsOrigin) return hsA;
|
||||||
if(s == hsA && dir >= 3 && dir <= S7-3) return hsA;
|
if(s == hsA && dir >= 3 && dir <= S7-3) return hsA;
|
||||||
|
@ -100,6 +100,7 @@
|
|||||||
#include "commandline.cpp"
|
#include "commandline.cpp"
|
||||||
#include "bigstuff.cpp"
|
#include "bigstuff.cpp"
|
||||||
#include "multigame.cpp"
|
#include "multigame.cpp"
|
||||||
|
#include "inforder.cpp"
|
||||||
|
|
||||||
#if CAP_ROGUEVIZ
|
#if CAP_ROGUEVIZ
|
||||||
#include "rogueviz/rogueviz.cpp"
|
#include "rogueviz/rogueviz.cpp"
|
||||||
|
48
inforder.cpp
Normal file
48
inforder.cpp
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
// Hyperbolic Rogue -- infinite-order tessellations
|
||||||
|
// Copyright (C) 2011-2019 Zeno Rogue, see 'hyper.cpp' for details
|
||||||
|
|
||||||
|
/** \file inforder3.cpp
|
||||||
|
* \brief infinite-order tessellations
|
||||||
|
*
|
||||||
|
* very simple
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hyper.h"
|
||||||
|
|
||||||
|
namespace hr {
|
||||||
|
|
||||||
|
EX namespace inforder {
|
||||||
|
|
||||||
|
struct hrmap_inforder : hrmap_hyperbolic {
|
||||||
|
|
||||||
|
heptagon *create_step(heptagon *h, int direction) {
|
||||||
|
auto h1 = tailored_alloc<heptagon> (S7);
|
||||||
|
bool par = h->s == hsA && direction == 0;
|
||||||
|
h->c.connect(direction, h1, par ? 1 + hrand(2) : 0, false);
|
||||||
|
|
||||||
|
h1->alt = NULL;
|
||||||
|
h1->s = hsA;
|
||||||
|
h1->cdata = NULL;
|
||||||
|
h1->distance = h->distance + (par ? -1 : 1);
|
||||||
|
h1->c7 = newCell(S7, h1);
|
||||||
|
|
||||||
|
return h1;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
EX hrmap* new_map() { return new hrmap_inforder; }
|
||||||
|
|
||||||
|
EX int celldistance(cell *c1, cell *c2) {
|
||||||
|
int d = 0;
|
||||||
|
while(true) {
|
||||||
|
if(c1 == c2) return d;
|
||||||
|
else if(c1->master->distance >= c2->master->distance) c1 = c1->move(0), d++;
|
||||||
|
else c2 = c2->move(0), d++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EX }
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -397,7 +397,7 @@ EX int fieldval_uniq(cell *c) {
|
|||||||
auto p = cell_to_pair(c);
|
auto p = cell_to_pair(c);
|
||||||
return gmod(p.first * torusconfig::dx + p.second * torusconfig::dy, torusconfig::qty);
|
return gmod(p.first * torusconfig::dx + p.second * torusconfig::dy, torusconfig::qty);
|
||||||
}
|
}
|
||||||
else if(binarytiling || archimedean || nil) return 0;
|
else if(binarytiling || archimedean || nil || S3 >= OINF) return 0;
|
||||||
else if(&currfp == &fp_invalid) return 0;
|
else if(&currfp == &fp_invalid) return 0;
|
||||||
else if(WDIM == 3) return c->master->fieldval;
|
else if(WDIM == 3) return c->master->fieldval;
|
||||||
else if(ctof(c) || NONSTDVAR) return c->master->fieldval/S7;
|
else if(ctof(c) || NONSTDVAR) return c->master->fieldval/S7;
|
||||||
|
@ -20,7 +20,7 @@ void geometry_information::hpcpush(hyperpoint h) {
|
|||||||
ld threshold = (GDIM == 3 || last->flags & POLY_TRIANGLES) ? 100 : (sphere ? (ISMOBWEB || NONSTDVAR ? .04 : .001) : 0.1) * pow(.25, vid.linequality);
|
ld threshold = (GDIM == 3 || last->flags & POLY_TRIANGLES) ? 100 : (sphere ? (ISMOBWEB || NONSTDVAR ? .04 : .001) : 0.1) * pow(.25, vid.linequality);
|
||||||
if(/*vid.usingGL && */!first) {
|
if(/*vid.usingGL && */!first) {
|
||||||
ld i = intval(hpc.back(), h);
|
ld i = intval(hpc.back(), h);
|
||||||
if(i > threshold && i < 10) {
|
if(i > threshold && (i < 10 || S3 >= OINF)) {
|
||||||
hyperpoint md = mid(hpc.back(), h);
|
hyperpoint md = mid(hpc.back(), h);
|
||||||
hpcpush(md);
|
hpcpush(md);
|
||||||
hpcpush(h);
|
hpcpush(h);
|
||||||
|
@ -1216,6 +1216,7 @@ EX void set_geometry(eGeometry target) {
|
|||||||
#if CAP_BT
|
#if CAP_BT
|
||||||
if(binarytiling || WDIM == 3 || penrose) if(!hybri) variation = eVariation::pure;
|
if(binarytiling || WDIM == 3 || penrose) if(!hybri) variation = eVariation::pure;
|
||||||
#endif
|
#endif
|
||||||
|
if(S3 == OINF) variation = eVariation::pure;
|
||||||
if(was_default) pmodel = default_model();
|
if(was_default) pmodel = default_model();
|
||||||
if(nonisotropic && old_DIM == 2 && vid.texture_step < 4) vid.texture_step = 4;
|
if(nonisotropic && old_DIM == 2 && vid.texture_step < 4) vid.texture_step = 4;
|
||||||
if(prod) { pmodel = mdPerspective; if(vid.texture_step < 4) vid.texture_step = 4; }
|
if(prod) { pmodel = mdPerspective; if(vid.texture_step < 4) vid.texture_step = 4; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user