- 136
- 157
Этот код — навигационная система для игры, которая строит сетку из точек, по которым можно перемещаться.
Сначала у нас есть конфиг — cfg. там хранятся настройки, типа шага сетки (расстояние между узлами), размера области вокруг игрока, которую нужно обновлять, и как часто это делать. типа, чтобы не обновлять всю карту сразу, а только то, что рядом с тобой.
Потом у нас есть nav — это основная структура, которая хранит всю информацию о сетке. там есть mesh — это сама сетка, где каждый узел содержит время последнего обновления, список высот (z-координат) и связи с соседями. ещё есть куча кэшей, чтобы всё работало быстрее.
Алгоритм работает так: сначала он инициализирует сетку, вычисляет размеры и центрирует её. потом, когда ты двигаешься, он обновляет узлы вокруг тебя. если узел устарел или его нет, он создаёт новый и обновляет его связи с соседями. для каждого узла он проверяет высоту с помощью функции, которая смотрит, есть ли прямая видимость между двумя точками. если высота найдена, он добавляет её в узел. потом он проверяет, можно ли пройти к соседям (прямая видимость и разница высот не слишком большая). если можно, он добавляет связь между узлами. ЩЫЫЩПЗЫЩПЗЫПЩЩХЫП ля прикол как же тупо юзать процесс лайн оф сайт, но работает же!
Когда тебе нужно куда-то бежать, код использует алгоритм a* (a-star), чтобы найти кратчайший путь. этот алгоритм работает так: он оценивает расстояние от текущего узла до цели, используя эвристику (типа, просто расстояние между координатами). потом он проходит по всем узлам, которые нужно проверить, и выбирает тот, который ближе всего к цели. если это цель, он строит путь и возвращает его. если нет, он проверяет всех соседей и обновляет их оценки.
потом этот путь преобразуется в список координат, и игрок начинает бежать по этим точкам. код даже рисует сетку на экране, чтобы ты видел, куда бежишь. он проходит по всем узлам в радиусе видимости и рисует линии до соседей, если они видны камере.
В общем КОД ГОВНО вот эти все nav.mesh[idx][NODE_NEIGHBORS][idx_nei] это что за пиздец? почему нельзя было сделать нормальные структуры данных? сука работает - не трогай, вызовы на каждом кадре? это rocket science, блять. Если что-то не работает, то это не баг, это фича. но в этом коде фич больше, чем в раннем доступе киберпанка сука на релизе.
Код открыт балуйтесь 🥸
Юзать: /path x y z координаты без запятых вводить
ворк только онфут
Rei котеночек спасибо тебе за способ каста сетки
Сначала у нас есть конфиг — cfg. там хранятся настройки, типа шага сетки (расстояние между узлами), размера области вокруг игрока, которую нужно обновлять, и как часто это делать. типа, чтобы не обновлять всю карту сразу, а только то, что рядом с тобой.
Потом у нас есть nav — это основная структура, которая хранит всю информацию о сетке. там есть mesh — это сама сетка, где каждый узел содержит время последнего обновления, список высот (z-координат) и связи с соседями. ещё есть куча кэшей, чтобы всё работало быстрее.
Алгоритм работает так: сначала он инициализирует сетку, вычисляет размеры и центрирует её. потом, когда ты двигаешься, он обновляет узлы вокруг тебя. если узел устарел или его нет, он создаёт новый и обновляет его связи с соседями. для каждого узла он проверяет высоту с помощью функции, которая смотрит, есть ли прямая видимость между двумя точками. если высота найдена, он добавляет её в узел. потом он проверяет, можно ли пройти к соседям (прямая видимость и разница высот не слишком большая). если можно, он добавляет связь между узлами. ЩЫЫЩПЗЫЩПЗЫПЩЩХЫП ля прикол как же тупо юзать процесс лайн оф сайт, но работает же!
Когда тебе нужно куда-то бежать, код использует алгоритм a* (a-star), чтобы найти кратчайший путь. этот алгоритм работает так: он оценивает расстояние от текущего узла до цели, используя эвристику (типа, просто расстояние между координатами). потом он проходит по всем узлам, которые нужно проверить, и выбирает тот, который ближе всего к цели. если это цель, он строит путь и возвращает его. если нет, он проверяет всех соседей и обновляет их оценки.
потом этот путь преобразуется в список координат, и игрок начинает бежать по этим точкам. код даже рисует сетку на экране, чтобы ты видел, куда бежишь. он проходит по всем узлам в радиусе видимости и рисует линии до соседей, если они видны камере.
В общем КОД ГОВНО вот эти все nav.mesh[idx][NODE_NEIGHBORS][idx_nei] это что за пиздец? почему нельзя было сделать нормальные структуры данных? сука работает - не трогай, вызовы на каждом кадре? это rocket science, блять. Если что-то не работает, то это не баг, это фича. но в этом коде фич больше, чем в раннем доступе киберпанка сука на релизе.
Код открыт балуйтесь 🥸
Юзать: /path x y z координаты без запятых вводить
ворк только онфут
Rei котеночек спасибо тебе за способ каста сетки