1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-12-20 15:40:26 +00:00

Revert "rulegen:: trace_rootpath changed to beats_exhaustive"

This reverts commit 81e8a1f113.
This commit is contained in:
Zeno Rogue 2021-12-26 17:31:42 +01:00
parent 81e8a1f113
commit e466ed8e22

View File

@ -814,29 +814,38 @@ EX void ensure_shorter(twalker cw) {
} }
} }
EX bool beats_exhaustive(twalker w1, twalker w2) { void trace_root_path(vector<int>& rp, twalker cw) {
int iter = 0; auto d = cw.peek()->dist;
while(true) { iter++; cw += wstep; auto scw = cw;
w1 += wstep;
w2 += wstep;
if(w1.at->dist == 0) bool side = (flags & w_parent_side);
return w1.spin > w2.spin;
be_solid(w1.at); next:
be_solid(w2.at); if(d > 0) {
ufind(cw);
handle_distance_errors(); handle_distance_errors();
auto cwd = get_parent_dir(cw);
auto sw1 = get_parent_dir(w1); for(int i=0; i<cw.at->type; i++) {
auto sw2 = get_parent_dir(w2); if((!side) && (cw+i) != cwd) continue;
tcell *c1 = cwd.peek();
int d1 = w1.to_spin(sw1.spin); if(!c1) continue;
int d2 = w2.to_spin(sw2.spin); be_solid(c1);
if(d1 != d2) return d1 < d2; handle_distance_errors();
if(c1->dist < d) {
w1 = sw1; rp.push_back(i);
w2 = sw2; cw += i;
cw += wstep;
d--;
goto next;
}
}
} }
if(d > 0) {
debuglist = {scw};
throw rulegen_failure("should not happen [trace]");
}
rp.push_back(cw.to_spin(0));
if(flags & w_parent_reverse) reverse(rp.begin(), rp.end());
} }
EX int parent_updates; EX int parent_updates;
@ -904,10 +913,17 @@ EX twalker get_parent_dir(twalker& cw) {
resolve: resolve:
hard_parents++; hard_parents++;
bestd = nearer[0]; vector<int> best;
int bestfor = nearer[0];
trace_root_path(best, twalker(c, nearer[0]));
for(auto ne1: nearer) if(ne1 != bestd && beats_exhaustive(twalker(c, ne1), twalker(c, bestd))) for(auto ne1: nearer) {
bestd = ne1; vector<int> other;
trace_root_path(other, twalker(c, ne1));
if(other < best) best = other, bestfor = ne1;
}
bestd = bestfor;
} }
if(bestd == -1) { if(bestd == -1) {