mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-23 21:07:17 +00:00
racing:: Crossroads in 3D geometries
This commit is contained in:
parent
35cf9ac57f
commit
6dfb531f9d
17
racing.cpp
17
racing.cpp
@ -188,13 +188,17 @@ void fix_cave(cell *c) {
|
|||||||
if(v<0 && c->wall == waCavewall) c->wall = waCavefloor;
|
if(v<0 && c->wall == waCavewall) c->wall = waCavefloor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool keep_to_crossroads() {
|
||||||
|
return specialland == laCrossroads && !(nonisotropic || hybri);
|
||||||
|
}
|
||||||
|
|
||||||
bool bad(cell *c2, cell *c) {
|
bool bad(cell *c2, cell *c) {
|
||||||
if(c2->land == laCaves) {
|
if(c2->land == laCaves) {
|
||||||
forCellEx(c3, c2) fix_cave(c3);
|
forCellEx(c3, c2) fix_cave(c3);
|
||||||
fix_cave(c2);
|
fix_cave(c2);
|
||||||
}
|
}
|
||||||
if(!passable(c2, c, P_ISPLAYER)) return true;
|
if(!passable(c2, c, P_ISPLAYER)) return true;
|
||||||
if((c2->land == laCrossroads) ^ (c->land == laCrossroads)) return true;
|
if((c2->land == laCrossroads) ^ (c->land == laCrossroads) && keep_to_crossroads()) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,7 +220,7 @@ int pcelldist(cell *c) {
|
|||||||
int trackval(cell *c) {
|
int trackval(cell *c) {
|
||||||
int v = rcelldist(c);
|
int v = rcelldist(c);
|
||||||
int bonus = 0;
|
int bonus = 0;
|
||||||
if(c->land != laCrossroads)
|
if(c->land != laCrossroads || !keep_to_crossroads())
|
||||||
forCellEx(c2, c) {
|
forCellEx(c2, c) {
|
||||||
int d = rcelldist(c2) - v;
|
int d = rcelldist(c2) - v;
|
||||||
if(d < 0 && bad(c2, c))
|
if(d < 0 && bad(c2, c))
|
||||||
@ -431,12 +435,7 @@ EX void generate_track() {
|
|||||||
|
|
||||||
bounded_track = false;
|
bounded_track = false;
|
||||||
|
|
||||||
if(sol && specialland == laCrossroads) {
|
if(sol) {
|
||||||
track.push_back(s);
|
|
||||||
while(isize(track) < LENGTH)
|
|
||||||
track.push_back(track.back()->cmove((isize(track) & 1) ? 0 : 1));
|
|
||||||
}
|
|
||||||
else if(sol) {
|
|
||||||
track.push_back(s);
|
track.push_back(s);
|
||||||
find_track(s, 1, LENGTH/4);
|
find_track(s, 1, LENGTH/4);
|
||||||
find_track(track.back(), -1, LENGTH-2*(LENGTH/4));
|
find_track(track.back(), -1, LENGTH-2*(LENGTH/4));
|
||||||
@ -517,7 +516,7 @@ EX void generate_track() {
|
|||||||
for(const auto s: rti) byat[s.from_track]++;
|
for(const auto s: rti) byat[s.from_track]++;
|
||||||
for(int a=0; a<16; a++) printf("%d: %d\n", a, byat[a]);
|
for(int a=0; a<16; a++) printf("%d: %d\n", a, byat[a]);
|
||||||
|
|
||||||
if(s->land == laCaves) {
|
if(s->land == laCaves || (s->land == laCrossroads && !keep_to_crossroads())) {
|
||||||
set<unsigned> hash;
|
set<unsigned> hash;
|
||||||
while(true) {
|
while(true) {
|
||||||
unsigned hashval = 7;
|
unsigned hashval = 7;
|
||||||
|
Loading…
Reference in New Issue
Block a user