Advertisement
Ulabael

neighbors_on_square_grid

Jul 15th, 2022
987
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function neighbors(start)
  2. {
  3.     var neighbors_ar = array_create(0, 0)
  4.     // start - это порядковый номер графа
  5.     // Следовательно, нам нужно найти и вернуть соседей при условии, что мы можем по ним пройти
  6.     var cellx = global.grid_array[start][0] // Клетка по оси x
  7.     var celly = global.grid_array[start][1] // Клетка по оси y
  8.     // Следовательно, нам нужны: [[-1, -1], [0, -1], [1, -1], [-1, 0], [1, 0], [-1, 1], [0, 1], [1, 1]]. Диагонали можно убрать.
  9.     var cells = [[cellx -1, celly-1], [cellx, celly-1], [cellx+1, celly-1], [cellx-1, celly], [cellx+1, celly], [cellx-1, celly+1], [cellx, celly+1], [cellx+1, celly+1]]
  10.     for (var i = 0; i < array_length(cells); ++i)
  11.     {
  12.         // cells[i][0] - это x, cells[i][1] - это y. Проверяем, что мы не выходим за границы карты, чтобы не было ошибок.
  13.         if cells[i][0] > -1 and cells[i][0] < room_width div CellWidth
  14.         and cells[i][1] > -1 and cells[i][1] < room_height div CellHeight
  15.         {
  16.             var curx = cells[i][0] * 32
  17.             var cury = cells[i][1] * 32
  18.             var cell = curx div CellWidth + cury div CellHeight * (room_width div CellWidth)
  19.             if ds_grid_get(global.grid, cells[i][0], cells[i][1]) != 0 // Стоимость нуль = непроходима. Следовательно, если клетка проходима - заносим её.
  20.             {
  21.                 array_push(neighbors_ar, cell)
  22.             }
  23.         }
  24.     }
  25.     // Возвращаем список доступных соседей
  26.     return neighbors_ar
  27. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement