mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-12-24 09:00:34 +00:00
rulegen:: implemented w_numerical
This commit is contained in:
parent
75e637be30
commit
1c08b5500f
29
rulegen.cpp
29
rulegen.cpp
@ -58,7 +58,7 @@ EX int states_premini = 0;
|
|||||||
|
|
||||||
#ifdef HDR
|
#ifdef HDR
|
||||||
/** change some flags -- they usually make it worse */
|
/** change some flags -- they usually make it worse */
|
||||||
static const flagtype w_numerical = Flag(1); /*< build trees numerically (to be implemented) */
|
static const flagtype w_numerical = Flag(1); /*< build trees numerically */
|
||||||
static const flagtype w_single_shortcut = Flag(2); /*< generate just one shortcut */
|
static const flagtype w_single_shortcut = Flag(2); /*< generate just one shortcut */
|
||||||
static const flagtype w_no_shortcut = Flag(3); /*< generate no shortcuts */
|
static const flagtype w_no_shortcut = Flag(3); /*< generate no shortcuts */
|
||||||
static const flagtype w_no_restart = Flag(4); /*< do not restart at powers of two */
|
static const flagtype w_no_restart = Flag(4); /*< do not restart at powers of two */
|
||||||
@ -175,9 +175,23 @@ tcell *gen_tcell(int id) {
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
map<cell*, tcell*> cell_to_tcell;
|
||||||
|
map<tcell*, cell*> tcell_to_cell;
|
||||||
|
|
||||||
tcell* tmove(tcell *c, int d) {
|
tcell* tmove(tcell *c, int d) {
|
||||||
if(d<0 || d >= c->type) throw hr_exception("wrong d");
|
if(d<0 || d >= c->type) throw hr_exception("wrong d");
|
||||||
if(c->move(d)) return c->move(d);
|
if(c->move(d)) return c->move(d);
|
||||||
|
if(flags & w_numerical) {
|
||||||
|
cell *oc = tcell_to_cell[c];
|
||||||
|
cell *oc1 = oc->cmove(d);
|
||||||
|
auto& c1 = cell_to_tcell[oc1];
|
||||||
|
if(!c1) {
|
||||||
|
c1 = gen_tcell(shvid(oc1));
|
||||||
|
tcell_to_cell[c1] = oc1;
|
||||||
|
}
|
||||||
|
c->c.connect(d, cell_to_tcell[oc1], oc->c.spin(d), false);
|
||||||
|
return c1;
|
||||||
|
}
|
||||||
auto cd = twalker(c, d);
|
auto cd = twalker(c, d);
|
||||||
ufind(cd);
|
ufind(cd);
|
||||||
auto& co = arb::current.shapes[c->id].connections[cd.spin];
|
auto& co = arb::current.shapes[c->id].connections[cd.spin];
|
||||||
@ -1577,8 +1591,19 @@ EX void generate_rules() {
|
|||||||
hard_parents = single_live_branches = double_live_branches = 0;
|
hard_parents = single_live_branches = double_live_branches = 0;
|
||||||
|
|
||||||
t_origin.clear();
|
t_origin.clear();
|
||||||
|
cell_to_tcell.clear();
|
||||||
|
tcell_to_cell.clear();
|
||||||
|
|
||||||
if(flags & w_single_origin) {
|
if(flags & w_numerical) {
|
||||||
|
start_game();
|
||||||
|
cell *s = currentmap->gamestart();
|
||||||
|
tcell *c = gen_tcell(shvid(s));
|
||||||
|
cell_to_tcell[s] = c;
|
||||||
|
tcell_to_cell[c] = s;
|
||||||
|
c->dist = 0;
|
||||||
|
t_origin.push_back(c);
|
||||||
|
}
|
||||||
|
else if(flags & w_single_origin) {
|
||||||
tcell *c = gen_tcell(0);
|
tcell *c = gen_tcell(0);
|
||||||
c->dist = 0;
|
c->dist = 0;
|
||||||
t_origin.push_back(c);
|
t_origin.push_back(c);
|
||||||
|
Loading…
Reference in New Issue
Block a user