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:
parent
b693c3ca58
commit
754c4177ca
39
rogueviz.cpp
39
rogueviz.cpp
@ -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++)
|
||||||
|
Loading…
Reference in New Issue
Block a user