Код: Выделить всё
ProcessNeighbor(ob, area, currentNode, x + 1, y);
ProcessNeighbor(ob, area, currentNode, x - 1, y);
ProcessNeighbor(ob, area, currentNode, x, y + 1);
ProcessNeighbor(ob, area, currentNode, x, y - 1);
ProcessNeighbor(ob, area, currentNode, x + 1, y + 1);
ProcessNeighbor(ob, area, currentNode, x + 1, y - 1);
ProcessNeighbor(ob, area, currentNode, x - 1, y - 1);
ProcessNeighbor(ob, area, currentNode, x - 1, y + 1);
все координаты соседей можно посчитать заранее один раз и записать их в ноды, а тут 12 арифметических действий. И у меня карта представляет собой одномерный массив, а класс Level просто преобразует декартовы координаты в нужный номер ячейки, а там в алгоритме есть и деление, и умножение. А можно писать не декартовы координаты ноды, а конкретный номер ячейки в одномерном массиве. В общем масса возможностей для оптимизации. Хотя поиск пути используется не очень часто, а если и используется - то на крайне небольшие расстояния в пределах прямой видимости, а там всё происходит практически мгновенно.
Ну а если нужно пути искать через весь уровень, то уровень обычно состоит из отдельных комнат, между которыми можно просчитать пути и записать их, ну и использовать по мере надобности.