mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-12-20 23:50:27 +00:00
Revert "rulegen:: trace_rootpath changed to beats_exhaustive"
This reverts commit 81e8a1f113
.
This commit is contained in:
parent
81e8a1f113
commit
e466ed8e22
60
rulegen.cpp
60
rulegen.cpp
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user