Advertisement
vnx5

zM pathfinder

May 20th, 2019
8,462
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // zursor master pathfinder
  2. // updated may 26, 2019
  3.  
  4. zM.dependenciesLoaded |= 0b100000;
  5.  
  6. var visit = [];
  7.  
  8. zM.dos = function(dx, dy, items, gridSpace) {
  9.     var gridX = 400/gridSpace,
  10.         gridY = 300/gridSpace;
  11.     var grid = [];
  12.     visit = [];
  13.     for (var i = 0; i < gridY; i++) {
  14.         grid[i] = [];
  15.         visit[i] = [];
  16.         for (var j = 0; j < gridX; j++) grid[i][j] = 0, visit[i][j] = 0;
  17.     }
  18.     items.forEach(function(d) {
  19.         if (d.type === 1) {
  20.             for (var i = 0; i < d.h; i+=gridSpace) {
  21.                 for (var j = 0; j < d.w; j+=gridSpace) {
  22.                     grid[(d.y+i)/gridSpace][(d.x+j)/gridSpace] = 3;
  23.                 }
  24.             }
  25.         }
  26.     });
  27.     var bfs = [[dx,dy]],
  28.         bfs2 = [];
  29.     while (bfs.length) {
  30.         bfs.forEach(function(dat) {
  31.             var x = dat[0],
  32.                 y = dat[1];
  33.             if (grid[y][x] == 3) return;
  34.             grid[y][x] = 3;
  35.             for (var X = x + 1; X < gridX && !(grid[y][X] & 1); X++) {
  36.                 grid[y][X] |= 1;
  37.                 if (!visit[y][X]) {
  38.                     visit[y][X] = [x, y], bfs2.push([X, y]);
  39.                 }
  40.             }
  41.             for (var X = x - 1; X >= 0 && !(grid[y][X] & 1); X--) {
  42.                 grid[y][X] |= 1;
  43.                 if (!visit[y][X]) {
  44.                     visit[y][X] = [x, y], bfs2.push([X, y]);
  45.                 }
  46.             }
  47.             for (var Y = y + 1; Y < gridY && !(grid[Y][x] & 2); Y++) {
  48.                 grid[Y][x] |= 2;
  49.                 if (!visit[Y][x]) {
  50.                     visit[Y][x] = [x, y], bfs2.push([x, Y]);
  51.                 }
  52.             }
  53.             for (var Y = y - 1; Y >= 0 && !(grid[Y][x] & 2); Y--) {
  54.                 grid[Y][x] |= 2;
  55.                 if (!visit[Y][x]) {
  56.                     visit[Y][x] = [x, y], bfs2.push([x, Y]);
  57.                 }
  58.             }
  59.         });
  60.         bfs = bfs2;
  61.         bfs2 = [];
  62.     }
  63. }
  64.  
  65. zM.path = function(ox, oy, dx, dy, items, grid) {
  66.  
  67.     var rdx = dx, rdy = dy;
  68.     ox /= grid;
  69.     oy /= grid;
  70.     dx /= grid;
  71.     dy /= grid;
  72.  
  73.     ox |= 0;
  74.     oy |= 0;
  75.     dx |= 0;
  76.     dy |= 0;
  77.    
  78.     var mov = [];
  79.     if (!(ox == dx && oy == dy)) {
  80.         zM.dos(ox,oy,items,grid);
  81.         var xy2 = [dx,dy];
  82.         while (visit[xy2[1]][xy2[0]]) {
  83.             mov.push(xy2);
  84.             xy2 = visit[xy2[1]][xy2[0]];
  85.         }
  86.  
  87.         mov.reverse();
  88.     }
  89.  
  90.     for (var i = 0; i < mov.length; ++i) {
  91.         mov[i][0] *= grid;
  92.         mov[i][0] += grid/2;
  93.         mov[i][1] *= grid;
  94.         mov[i][1] += grid/2;
  95.     }
  96.     mov.push([rdx, rdy]);
  97.     return mov;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement