1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2025-02-03 04:39:17 +00:00

RogueViz SAG now works in bounded spaces

This commit is contained in:
Zeno Rogue 2018-02-08 22:28:07 +01:00
parent b693c3ca58
commit 754c4177ca

View File

@ -506,7 +506,7 @@ namespace sag {
int snakedist(int i, int j) { int snakedist(int i, int j) {
if(i < insnaketab && j < insnaketab) return sdist[i][j]; if(i < insnaketab && j < insnaketab) return sdist[i][j];
if(euclid || sphere) return celldistance(snakecells[i], snakecells[j]); if(bounded) return celldistance(snakecells[i], snakecells[j]);
int i0 = i, i1 = i, j0 = j, j1 = j; int i0 = i, i1 = i, j0 = j, j1 = j;
int cost = 0; int cost = 0;
// intersect // intersect
@ -520,8 +520,7 @@ namespace sag {
} }
void initSnake(int n) { void initSnake(int n) {
if(sphere && nonbitrunc) n = 12; if(bounded) n = size(currentmap->allcells());
else if(sphere) n = 32;
numsnake = n; numsnake = n;
snakecells.resize(numsnake); snakecells.resize(numsnake);
snakefirst.resize(numsnake); snakefirst.resize(numsnake);
@ -529,20 +528,28 @@ namespace sag {
snakenode.resize(numsnake); snakenode.resize(numsnake);
lpbak.resize(numsnake); lpbak.resize(numsnake);
wpbak.resize(numsnake); wpbak.resize(numsnake);
cellwalker cw = cwt; if(bounded) {
setsnake(cw, 0); for(int i=0; i<n; i++) {
cwstep(cw); cellwalker cw(currentmap->allcells()[i], 0);
setsnake(cw, 1); setsnake(cw, i);
for(int i=2; i<=numsnake; i++) { }
if(i == numsnake && sphere) break; }
cwstep(cw); else {
snakefirst[i-1] = cw.c->landparam; cellwalker cw = cwt;
while(cw.c->wparam == INSNAKE) { setsnake(cw, 0);
snakelast[i-1] = cw.c->landparam; cwstep(cw);
cwstep(cw); cwspin(cw, 1); cwstep(cw); setsnake(cw, 1);
for(int i=2; i<=numsnake; i++) {
if(i == numsnake && sphere) break;
cwstep(cw);
snakefirst[i-1] = cw.c->landparam;
while(cw.c->wparam == INSNAKE) {
snakelast[i-1] = cw.c->landparam;
cwstep(cw); cwspin(cw, 1); cwstep(cw);
}
if(i == numsnake) break;
setsnake(cw, i); cwspin(cw, 1);
} }
if(i == numsnake) break;
setsnake(cw, i); cwspin(cw, 1);
} }
int stab = min(numsnake, MAXSNAKETAB); int stab = min(numsnake, MAXSNAKETAB);
for(int i=0; i<stab; i++) for(int i=0; i<stab; i++)