new system for honeycombs in action

This commit is contained in:
Zeno Rogue 2022-08-26 12:27:57 +02:00
parent 31b2bd9690
commit 841108726c
45 changed files with 81 additions and 84 deletions

View File

@ -153,7 +153,7 @@ EX int default_levs() {
if(S3 >= OINF)
return 1;
#if MAXMDIM >= 4
if(reg3::in_rule()) return 0;
if(reg3::in_hrmap_rule_or_subrule()) return 0;
#endif
return S3-3;
}
@ -240,7 +240,7 @@ EX heptagon *create_altmap(cell *c, int rad, hstate firststate, int special IS(0
int gdir = -1;
for(int i=0; i<c->type; i++) {
#if MAXMDIM >= 4
if(!reg3::in_rule()) {
if(!reg3::in_hrmap_rule_or_subrule()) {
#else
if(true) {
#endif
@ -252,7 +252,7 @@ EX heptagon *create_altmap(cell *c, int rad, hstate firststate, int special IS(0
}
}
#if MAXMDIM >= 4
if(reg3::in_rule() && c->master->distance == 0) gdir = 0;
if(reg3::in_hrmap_rule_or_subrule() && c->master->distance == 0) gdir = 0;
#endif
if(gdir < 0) return NULL;
@ -1670,7 +1670,7 @@ EX void build_horocycles(cell *c, cell *from) {
if(ls::any_order() && bearsCamelot(c->land) && can_start_horo(c) && !bt::in() &&
#if MAXMDIM >= 4
!(hyperbolic && WDIM == 3 && !reg3::in_rule()) &&
!(hyperbolic && WDIM == 3 && !reg3::in_hrmap_rule_or_subrule()) &&
#endif
(quickfind(laCamelot) || peace::on || (hrand(I2000) < (c->land == laCrossroads4 || ls::no_walls() ? 800 : 200) && horo_ok() &&
items[itEmerald] >= U5)))
@ -1860,7 +1860,7 @@ EX void buildCamelot(cell *c) {
EX int masterAlt(cell *c) {
if(eubinary) return celldistAlt(c);
#if MAXMDIM >= 4
if(WDIM == 3 && hyperbolic && !reg3::in_rule()) return reg3::altdist(c->master);
if(WDIM == 3 && hyperbolic && !reg3::in_hrmap_rule_or_subrule()) return reg3::altdist(c->master);
#endif
return c->master->alt->distance;
}

View File

@ -232,7 +232,7 @@ EX vector<hrmap*> allmaps;
EX hrmap *newAltMap(heptagon *o) {
#if MAXMDIM >= 4
if(reg3::in_rule())
if(reg3::in_hrmap_rule_or_subrule())
return reg3::new_alt_map(o);
#endif
if(currentmap->strict_tree_rules())
@ -638,7 +638,7 @@ EX int celldistAlt(cell *c) {
}
#if MAXMDIM >= 4
if(euc::in()) return euc::dist_alt(c);
if(hyperbolic && WDIM == 3 && !reg3::in_rule())
if(hyperbolic && WDIM == 3 && !reg3::in_hrmap_rule_or_subrule())
return reg3::altdist(c->master);
#endif
if(!c->master->alt) return 0;
@ -676,7 +676,7 @@ EX int updir(heptagon *h) {
if(bt::in()) return bt::updir();
#endif
#if MAXMDIM >= 4
if(WDIM == 3 && reg3::in_rule()) {
if(WDIM == 3 && reg3::in_hrmap_rule_or_subrule()) {
for(int i=0; i<h->type; i++) if(h->move(i) && h->move(i)->distance < h->distance)
return i;
return -1;
@ -690,7 +690,7 @@ EX int updir(heptagon *h) {
EX int updir_alt(heptagon *h) {
if(euclid || !h->alt) return -1;
#if MAXMDIM >= 4
if(WDIM == 3 && reg3::in_rule()) {
if(WDIM == 3 && reg3::in_hrmap_rule_or_subrule()) {
for(int i=0; i<S7; i++) if(h->move(i) && h->move(i)->alt && h->move(i)->alt->distance < h->alt->distance)
return i;
return -1;

View File

@ -113,7 +113,7 @@ void expansion_analyzer::preliminary_grouping() {
for(int v: rulegen::treestates[i].rules)
if(v >= 0) children[i].push_back(v);
}
else if(reg3::in_rule()) {
else if(reg3::exact_rules()) {
#if MAXMDIM >= 4
rootid = reg3::rule_get_root(0);
auto& chi = reg3::rule_get_children();
@ -145,7 +145,7 @@ void expansion_analyzer::preliminary_grouping() {
}
void expansion_analyzer::reduce_grouping() {
if(reg3::in_rule()) return;
if(reg3::exact_rules()) return;
if(currentmap->strict_tree_rules()) return;
int old_N = N;
vector<int> grouping;
@ -239,7 +239,7 @@ bool expansion_analyzer::verify(int id) {
int expansion_analyzer::valid(int v, int step) {
if(step < 0) return 0;
int more = reg3::in_rule() ? 1 : 5;
int more = reg3::exact_rules() ? 1 : 5;
#if CAP_GMP == 0
if(get_descendants(step+v+v+more).approx_int() >= bignum::BASE) return 0;
typedef ld val;
@ -392,7 +392,7 @@ int type_in_quick(expansion_analyzer& ea, cell *c, const cellfunction& f) {
}
EX bool sizes_known() {
if(reg3::in_rule()) return true;
if(reg3::exact_rules()) return true;
if(closed_manifold) return false;
// Castle Anthrax is infinite
if(bt::in()) return false;
@ -583,7 +583,7 @@ void celldrawer::do_viewdist() {
}
case ncType: {
int t = -1;
if(reg3::in_rule()) switch(distance_from) {
if(reg3::exact_rules()) switch(distance_from) {
case dfPlayer:
t = -1;
break;
@ -740,7 +740,7 @@ void expansion_analyzer::view_distances_dialog() {
if(really_use_analyzer) {
int t;
if(reg3::in_rule() || currentmap->strict_tree_rules()) {
if(reg3::exact_rules() || currentmap->strict_tree_rules()) {
if(!N) preliminary_grouping();
t = rootid;
}

View File

@ -1129,7 +1129,7 @@ EX void showEuclideanMenu() {
dialog::addSelItem(XLAT("size of the world"), gd.size_str, '3');
if(WDIM == 2 || reg3::in_rule()) dialog::add_action([] {
if(WDIM == 2 || reg3::exact_rules()) dialog::add_action([] {
if(!viewdists) { enable_viewdists(); pushScreen(viewdist_configure_dialog); }
else if(viewdists) viewdists = false;
});

View File

@ -1 +0,0 @@
М■Иmц0 ┘╘:n▌╕q t .А╚М:|▄жя╡┘C┼┼" :@M─фШ(И▐s░R║╧V┴V│сл*яэY2┤dгёRxоv(x^*|>aИ╔≈Ч╞ЩK=┘zВЙ4Цs$Ф▐└└оp┌rw╟├ш\x гВ4/С_j 8/Ш┘7p┬°ШyXя|ВШ1©▒>D~УСcЮлГвЯ╝≥оoФЭ6АЖРrч'yyЁД Ъ~иъчоЫK┴зhтNci5╨ч║┼[▓╚и╣╫E;Xrк░eв▄м`П╬│щ*ЗVQ╠W▒╙Ц╝К╗ь╚I5ЯЭ⌡╗ьkH╣ьУv#Уп╣3БY;#·╣D_Ь█?xhLХН

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,3 +0,0 @@
<EFBFBD>•ωRΤ@ΖK`ρDΕµEEAE±*{° ψI6wΟGσ<47>µ{<7B>LΟ&T±UI6Ώώ<CE8F>έσMgwόΟΒ%ΎCΗ3Λt,™ƒ?+ζΊf®­^π|Wώή%ΩΙ<E2809A>έ<1C>θf&>ίΰ+Βk<CE92>2?4d ζωΌSKή¥·ω7`,ΧΧ]`½δΊ®ζWα…§GΨ…»s\χoωNKΏ5Η<0F>~Όaςυ³βZ#Ή\οΆ:o«σ<C2AB>πGrιΫα<E28099>ηΰώ±α³™δ²Ι¥ΟΛp<13>ƒ®ϋ¥ΙβsYwn5ό‡π_rι?(®uR/ΉάΗσύ>μΓϊΞ>σ½δrήΦa@[oω=βoΝ>ςy•ψK“λ}³Ώ·Ar9'λ†ΛΊs~™ηJ³οϋ ύ—\Ξ³ζO¥ϊ—zΝεΊzp<7A>®Οηϋ=£—\ζΡ|Ϋθ?Α^—}φΰΨ9a½<61>ΙεΌυΰ†Ϊχ¶ήq9?Ο½ύΛ9μΟα1ό4λuzΗεώjήε<CEAE>γΎ<CEB3>όjυγψ‡f>ο€ε]ύXξζΑκ»όw\ώ<>X~άΩ<CEAC>ζς=ZSΌύ~I.ϋ—\φ)Ήχ»χ—ώy<02>£ƒ΄Β 1<><31>WO 0<>b<EFBFBD>ΒC (NsLσ £43
~Φ*ΆJGΊ<47>·QW3lΥd<12>ZI`'<27>^ΠΩE Ίf}2<>­Εετ5²vϋΤ'χW•φ©Η*µkκ«υ¤ρϋDΛ"Γ~Y©¨.ιHΤ<48>WuθQWΥFό^"Ρ Χ9Α"¥3U:΅JeTΚω|buά&¶Ώ$<24>q„#ς…5#γµ£rxΟ¬Λ λ0Ζ9β(ϋ3lbΓΌ »a]`>­%‰kµαΜ<CEB1>ΨZCρ<43>ΞΞ> Β IάTζz6>π¨ν<C2A8>έ7ΊqMG)jΩ9<CEA9>Sf­³<C2AD>Κ·we“†絧γσ3<#ί™ϊΪ<CF8A>΄Υu:ή<>"<22>†½¥§γσS<Ν
¥γΈL•+™Ρρ:&<26>Ώ“¬4λ”qλΔSsp­l®Φ'”§ Zν:YSgάzΞu<CE9E>uvΟυ<%bΚ|:Ά<>ο¦<<0F>Ψ ω23WΚ

Binary file not shown.

Binary file not shown.

BIN
honeycombs/336h-c0.dat Normal file

Binary file not shown.

BIN
honeycombs/336h-c7.dat Normal file

Binary file not shown.

BIN
honeycombs/336h.dat Normal file

Binary file not shown.

BIN
honeycombs/344h-c0.dat Normal file

Binary file not shown.

BIN
honeycombs/344h-c7.dat Normal file

Binary file not shown.

BIN
honeycombs/344h.dat Normal file

Binary file not shown.

BIN
honeycombs/345h.dat Normal file

Binary file not shown.

BIN
honeycombs/353h-c0.dat Normal file

Binary file not shown.

BIN
honeycombs/353h-c7.dat Normal file

Binary file not shown.

BIN
honeycombs/353h.dat Normal file

Binary file not shown.

BIN
honeycombs/354h.dat Normal file

Binary file not shown.

BIN
honeycombs/355h.dat Normal file

Binary file not shown.

BIN
honeycombs/434c-c0.dat Normal file

Binary file not shown.

BIN
honeycombs/434c-c7.dat Normal file

Binary file not shown.

2
honeycombs/434c.dat Normal file
View File

@ -0,0 +1,2 @@
xз∙∙=t A├©╫!"!┌$"n┬ ┤ёп┬÷ёJ╔Rы≥²╜T*∙J╔R╔R╘hT*∙J╔R╘T*∙JЕ°xФчмэoЪНIЖ°gФЩч}Г⌡ы{▀≥Ш ╡ "┴└!I:L²╒ч╝<╫▄РeHN©╞ФvzЛ╪╚>:╚В╛ЖуЩ╙К7Юv╒о7пШHТу s╖пгe©▄длhT'Е─ЙрФ▐)=У╛▄zN∙~╜╫²g╪q/щSОuZ╔■>я╒Г∙>╣ _Вт{-*}FИ╝рK-╨ш╡╤ъsE9╒·░▀┘>б|╘пGЕ╟Л5©*W╘нЖ°кr█ЫL╤ЗFжd]√e Й┼\G÷≈c2%ш[#"н╔yn°Ё▄В▄кп>т5╥Лт2√й⌡ folT%/т6У fе-;X█и│÷вэ╕$)▌бwь╢Т∙U/т6~_╛hze.U╩╤{╝╘╨kR e▄ЮщБыба
c·∙э░ёaТь`╗;ХиРф╝зО╖╠о0П}мmЙ^⌠вЭ╤NЕЁ{gwЕ╧aNф²2:фШ&СХ<mrкN=cяЛ^ЙRУBМБЗXy2ж<0>╥МсSммБ┼┘ ≤├YX└eX┘5╦w`а&<├'ПrxоА╪└WПчю╪┘wП>б'Ь _Ю+|┐ОП~б/Ь Ю/Э W1ввLб лCVююzр©БЧ÷⌠Tq

BIN
honeycombs/435h-bs1.dat Normal file

Binary file not shown.

BIN
honeycombs/435h-bs2.dat Normal file

Binary file not shown.

BIN
honeycombs/435h-d2.dat Normal file

Binary file not shown.

BIN
honeycombs/435h-s2.dat Normal file

Binary file not shown.

BIN
honeycombs/435h.dat Normal file

Binary file not shown.

BIN
honeycombs/436h-s2.dat Normal file

Binary file not shown.

BIN
honeycombs/436h.dat Normal file

Binary file not shown.

BIN
honeycombs/534h-c0.dat Normal file

Binary file not shown.

5
honeycombs/534h-c7.dat Normal file
View File

@ -0,0 +1,5 @@
xÚÕÙ\œuÇñß³ÝÛ˜âDeŠÊõTTÔÛÄ<C39B>m·‰*&M2*þ<)&64J*J,R,*TTJ,*4T4T**ZT”L±°H±¨¨¨ÈШP©õ¹ßóå<C3B3>ËÛ^ë¹×›Ïóû=Ï=ÏwÇÝv+ï3f•1fÉb3µ8Ž³ÌL_œy¬®ãÃB -‹Ôu<>æÏrý™Ž¿tžsŽŽ +íŠÂr€ãõ$õdõÕ¯žªž¦ž®¦ªg8»¢¸Äë¾®®R<C2AE>U<EFBFBD>WOPUSËÕ¨ToP?¤®T?ª~Lý”úiµVÍRQ׫Ô<>jP½@Ý¢^¤nR7«™ê…êֈ󣞭æ©oSWDüŽTÕ£Ô£ÕÓÕTõ õ-êê[Õ·«ïPó#nWz¦zš6Çí>qŽÇù85YMQOROVOQýê©ÇŸ|^T¨Žxü+ÕÕ*õ&µZý¤z³zúõ³êçÔ:õ6õvõ#j9Âñz¤š¨¥mûN§l{¥9Ôö³P=L=\MPWÚ^cþiÏx­ú>óªm1C½Ú,°}—z<E28094>únõZµØ,U—©±êrõ@õ g…zˆo»]óÛ5¿]óWÙûµD¿<44>¥ê úõ·êrõ@5N=X}IuÔ/ª_RÔÉ¿¤w« êçÕ/¨÷D¯Q½7âx_Q[Õ‡ÕgÕûÔûÕ¯© Ô…êbõËêCjÄy¾:Ëù~qÞçÔu™«þZý<5A>:¤þ^Vÿ¤Ž¨U_PRÿ®Ž©ßQW}ê7Õo©ê·#®÷]u]äx]¥«§&«Ç«'Ð'è¿Ð:~„ÅÌw«?QŸPLÏTÏRÓèNÍïÔüNÍ@OTSèÏèÙ´Om3§Ù{ðs³Î¶Å\bû€ú Únαý†)P Õ"Û_˜mM†í×uÜÉã?¦>jru¾óÕµÓÎÿˆ¹œžçxÍp¾gT7;<3B>&ÝÎ{ ª›µ}«Æ[<5B>Úo‡öÛ¡ývh{—9—nr~îytƒºIÛ·hûÆkè…ÎÍjš©ý¶8ß7.½@ÍrÌ¥ô\5 ®qž7ÙvÞk@]£íë4^Çø2ºš¾ÙöyÛsÔÕÚ¾VÛ×j~­ó+ó&z>Í¡éÌoÓù¶é|Ût;¶Ùó<e>nÆY{:ÜO˜—éSæVóŠO¶ÞöISÿÐöÉÞjÛî¶?5wšúSb&L¨×ÙþþþÅ”šÿØ^g;ªþÙ¼ÇøœPßkÚÏk™íßÔÍõæúŒ¹Ë,q.rþaÞoœõήË<>)œ\üü……E\
ý….fšgCÄ¢ÂÙ·Í2?Û¬;Ï=gžw£<~ýÞÀÌzA—‚"¯þ-ám¡iÿ [&<>Ýiò¸³ïå-Þã5×^ì¶Ûóìæö¼þ¶º¬y?CÇu ¦æBûzc{OC×dÃÞ‡oõ>»Q<79>"×^^33uŸ÷ÖÈ<C396>òzä½ØóñÔíÛ?ÖÝ}¸¶7ŸÑ¤÷·ßÞž®…_ÑÿcÝýûçôw÷(ŒìûZÆÓ>AÌkzÿ×ëâ53n”Ö§Ÿgw#7ü)eú­Ùó±»Ûµ©³¾±u÷ÿzm®{5÷³bþ<62>ìÌ<C3AC>óÌëûþgø•Q¶nô{o.Ÿ&µÎtxÝÝ×öÞ%¸‡—Kõÿü>}58Ä#‰HB2RàG*Ò@:2D&²<><C2B2>ä"ùpQŒ”¢ å¨@%ªP þñhjQ‡z4 MhF Zцvt ]èFzч~ `CÆF1†qLèû
b8Ä#‰HB2RàG*Ò@zèë ‘‰,d#¹ÈC>\£¥(C9*P‰*T£µ¨C=Ј&4£­hC;:Љ.t£½èC?0ˆ! c£Ã8&ô]<5D>1ˆEâ€D$!)ð#i "YÈFr‡|¸(F JQ†rT U¨F jQ‡z4 MhF Zцvt ]èFzч~ `CÆF1†qL,ð¾#ó!±ˆC<<12>ˆ$$#~¤" ¤#Ad" ÙÈA.ò<>Å(A)ÊPŽ
Õ¨A-êP<C3AA>4¢ ÍhA+ÚÐŽ ÝèA/úÐ<C3BA> bÃÁ(Æ0Ž‰…Þ߇Ä"ñH@"<>ŒøŠ4<04>Ž ‘‰,d#¹ÈC>\£¥(C9*P‰*T£µ¨C=Ј&4£­hC;:Љ.t£½èC?0ˆ! c£Ã8&|Þ÷ >Ä qˆG„d¤À<C2A4>T¤!€ôEÞ×ÿyú€

BIN
honeycombs/534h.dat Normal file

Binary file not shown.

BIN
honeycombs/535h.dat Normal file

Binary file not shown.

BIN
honeycombs/536h.dat Normal file

Binary file not shown.

View File

@ -192,7 +192,7 @@ EX bool is_zebra_trapdoor(cell *c) {
else if(arb::in() && arb::current.have_line)
return arb::linespattern(c);
#if MAXMDIM >= 4
else if(reg3::in_rule()) switch(geometry) {
else if(PURE && reg3::exact_rules()) switch(geometry) {
case gSpace534: {
if(c->master->fieldval == 0) return true;
forCellCM(c1, c) if(c1->master->fieldval == 0) return true;

103
reg3.cpp
View File

@ -1304,18 +1304,11 @@ EX namespace reg3 {
}
EX bool minimize_quotient_maps = false;
EX bool subrule = false;
EX bool strafe_test = false;
hrmap_quotient3 *gen_quotient_map(bool minimized, fieldpattern::fpattern &fp) {
#if CAP_FIELD
#if CAP_CRYSTAL
if(geometry == gSpace344) {
return new hrmap_from_crystal(minimized ? 1 : 2);
}
else
#endif
if(geometry == gSpace535 && minimized) {
return new seifert_weber::hrmap_singlecell(108*degree);
}
@ -1454,6 +1447,7 @@ EX namespace reg3 {
}
hrmap_h3() {
println(hlog, "generating hrmap_h3");
origin = init_heptagon(S7);
heptagon& h = *origin;
h.s = hsOrigin;
@ -1856,22 +1850,6 @@ EX namespace reg3 {
ruleset() : fp(0) {}
void load_ruleset(string fname) {
shstream ins(decompress_string(read_file_as_string(fname)));
dynamicval<bool> q(fieldpattern::use_quotient_fp, true);
hread_fpattern(ins, fp);
hread(ins, root);
hread(ins, children);
hread(ins, other);
// hread(ins, childpos);
int t = S7;
int qty = isize(children) / t;
for(int i=0; i<=qty; i++) childpos.push_back(i * t);
}
void load_ruleset_new(string fname) {
shstream ins(decompress_string(read_file_as_string(fname)));
@ -1887,6 +1865,8 @@ EX namespace reg3 {
hread(ins, children);
hread(ins, other);
hread(ins, childpos);
println(hlog, "roots = ", isize(root), " states = ", isize(childpos)-1, " hashv = ", fp.hashv);
}
/** \brief address = (fieldvalue, state) */
@ -2045,8 +2025,10 @@ EX namespace reg3 {
hrmap_h3_rule() {
load_ruleset(get_rule_filename());
quotient_map = gen_quotient_map(is_minimized(), fp);
println(hlog, "generating hrmap_h3_rule");
load_ruleset_new(get_rule_filename(false));
quotient_map = gen_quotient_map(minimize_quotient_maps, fp);
find_mappings();
origin = init_heptagon(S7);
@ -2263,7 +2245,7 @@ EX namespace reg3 {
println(hlog, "loading a subrule ruleset");
load_ruleset_new(get_rule_filename());
load_ruleset_new(get_rule_filename(true));
quotient_map = gen_quotient_map(minimize_quotient_maps, fp);
int t = quotient_map->acells[0]->type;
find_mappings();
@ -2422,39 +2404,43 @@ EX hrmap *new_alt_map(heptagon *o) {
return new hrmap_h3_rule_alt(o);
}
EX bool reg3_rule_available = true;
EX string other_rule = "";
/** 1 -- consider pure rules, 2 -- consider variation rules, 3 -- consider both */
EX int consider_rules = 3;
EX bool is_minimized() {
return geometry != gSpace535 && geometry != gSpace344;
}
EX string replace_rule_file;
EX string get_rule_filename() {
if(other_rule != "") return other_rule;
switch(geometry) {
case gSpace336: return "honeycomb-rules-336.dat";
case gSpace344: return "honeycomb-rules-344.dat";
case gSpace345: return "honeycomb-rules-345.dat";
case gSpace353: return "honeycomb-rules-353.dat";
case gSpace354: return "honeycomb-rules-354.dat";
case gSpace355: return "honeycomb-rules-355.dat";
case gSpace435: return "honeycomb-rules-435.dat";
case gSpace436: return "honeycomb-rules-436.dat";
case gSpace534: return "honeycomb-rules-534.dat";
case gSpace535: return "honeycomb-rules-535.dat";
case gSpace536: return "honeycomb-rules-536.dat";
default: return "";
EX string get_rule_filename(bool with_variations) {
if(replace_rule_file != "") return replace_rule_file;
string s;
s += "honeycombs/";
s += ginf[geometry].tiling_name[1];
s += ginf[geometry].tiling_name[3];
s += ginf[geometry].tiling_name[5];
if(hyperbolic) s += "h";
else s += "c";
if(with_variations) {
if(variation == eVariation::coxeter) s += "-c" + its(coxeter_param);
if(variation == eVariation::subcubes) s += "-s" + its(subcube_count);
if(variation == eVariation::dual_subcubes) s += "-d" + its(subcube_count);
if(variation == eVariation::bch) s += "-bs" + its(subcube_count);
}
s += ".dat";
return find_file(s);
}
EX bool in_rule() {
return reg3_rule_available && get_rule_filename() != "";
EX bool variation_rule_available() {
return (consider_rules & 2) && file_exists(get_rule_filename(true));
}
EX bool pure_rule_available() {
return (consider_rules & 1) && file_exists(get_rule_filename(false));
}
ruleset& get_ruleset() {
if(subrule) return *((hrmap_h3_subrule*)currentmap);
if(in_rule()) return *((hrmap_h3_rule*)currentmap);
auto h1 = dynamic_cast<hrmap_h3_subrule*> (currentmap);
if(h1) return *h1;
auto h2 = dynamic_cast<hrmap_h3_rule*> (currentmap);
if(h2) return *h2;
throw hr_exception("get_ruleset called but not in rule");
}
@ -2475,8 +2461,8 @@ EX hrmap* new_map() {
if(geometry == gSeifertWeber) return new seifert_weber::hrmap_singlecell(108*degree);
if(geometry == gHomologySphere) return new seifert_weber::hrmap_singlecell(36*degree);
if(quotient && !sphere) return new hrmap_field3(&currfp);
if(subrule) return new hrmap_h3_subrule;
if(in_rule()) return new hrmap_h3_rule;
if(variation_rule_available()) return new hrmap_h3_subrule;
if(pure_rule_available()) return new hrmap_h3_rule;
if(sphere) return new hrmap_sphere3;
return new hrmap_h3;
}
@ -2489,6 +2475,15 @@ EX bool in_hrmap_h3() {
return dynamic_cast<hrmap_h3*> (currentmap);
}
EX bool in_hrmap_rule_or_subrule() {
return dynamic_cast<hrmap_h3_rule*> (currentmap) || dynamic_cast<hrmap_h3_subrule*> (currentmap);
}
EX bool exact_rules() {
if(PURE) return in_hrmap_rule_or_subrule();
return dynamic_cast<hrmap_h3_subrule*> (currentmap);
}
EX int quotient_count() {
return isize(hypmap()->quotient_map->allh);
}
@ -2553,7 +2548,7 @@ EX int celldistance(cell *c1, cell *c2) {
int b = bucketer(h);
if(cgi.close_distances.count(b)) return cgi.close_distances[b];
if(in_rule())
if(in_hrmap_rule_or_subrule())
return clueless_celldistance(c1, c2);
dynamicval<eGeometry> g(geometry, gBinary3);

View File

@ -2098,11 +2098,9 @@ EX void generate_rules() {
start_time = SDL_GetTicks();
delete_tmap();
if(WDIM == 3) {
if(WDIM == 3 && reg3::in_hrmap_rule_or_subrule()) {
stop_game();
reg3::reg3_rule_available = false;
fieldpattern::use_rule_fp = true;
fieldpattern::use_quotient_fp = true;
reg3::consider_rules = 0;
flags |= w_numerical;
start_game();
}

View File

@ -1716,19 +1716,20 @@ int readRuleArgs3() {
// -urq 7 to prepare honeycomb generation
stop_game();
shift(); int i = argi();
reg3::reg3_rule_available = (i & 8) ? 0 : 1;
reg3::consider_rules = i >> 3;
fieldpattern::use_rule_fp = (i & 1) ? 1 : 0;
fieldpattern::use_quotient_fp = (i & 2) ? 1 : 0;
reg3::minimize_quotient_maps = (i & 4) ? 1 : 0;
}
else if(argis("-subrule")) {
else if(argis("-load-honeycomb")) {
stop_game();
shift(); reg3::other_rule = args();
shstream ins(decompress_string(read_file_as_string(arg::args())));
string s = args();
shift(); reg3::replace_rule_file = s;
shstream ins(decompress_string(read_file_as_string(s)));
ins.read(ins.vernum);
mapstream::load_geometry(ins);
reg3::subrule = true;
reg3::consider_rules = 2;
}
else if(argis("-less-states")) {