Игра мечты [3] Математика гексов
Всем привет!
Меня зовут Владимир и я в режиме дневника пишу, как делаю свою игру.
Предыдущие посты:
Сразу после написания прошлого поста наткнулся на офигенную статью.
https://www.redblobgames.com/grids/hexagons/
В ней описано практически все, что мне может пригодиться при работе с гексами, и я понял, что пока стоит отложить генерирование красивой карты и заняться закладыванием фундамента.
Первым делом оказалось, что я неправильно раскладываю гексы по осям координат. Я как тупой бычок решил, что если поверхность 2д, то и гексы должны находиться на осях X и Y и иметь координаты типа (2;3). Но оказалось, что алгоритмам проще живется в 3д мире с XYZ осями и координатами типа (2;3;-1).
Поломав голову над 3д миром двухмерного пространства, начал по очереди бомбить фишки из статьи.
Например, теперь я могу спросить у любого гекса, кто его соседи:
Или даже дать всех соседей в определенном радиусе:
О, и даже получить все гексы, находящиеся на прямой между любыми двумя:
Можно даже получить гексы, видимые из определенной точки. На видео, например, точка видит горы, но не видит, что за ними:
Ну и конечно то, чего я боялся больше всего: поиск пути. На него пришлось потратить пару вечеров, ведь произошло самое страшное для программиста: копипаст не сработал, и, пока я не понял, как алгоритм работает, он собственно и не работал.
Приветствуйте, царь всех зверей, алгоритм поиска пути A*.
На видео горы не проходимы, а у остальных ячеек есть циферка-сложность проходимости. Грубо говоря, чтобы пройти светло-зеленый гекс, надо потратить 1 действие, а воду 5, у зеленой и коричневой вроде 2. Вот алгоритм и пытается найти маршрут, который займет меньшее количество действий.
Фух, очень рад, что за меня ученые мужи уже все придумали, я прям опасался, что по крайней мере поиск пути будет огромной проблемой, но это уже в прошлом, а в обозримом будущем по игре у меня только творческие задания)
Ну и у меня есть вопросики для мудрецов. В цивилизации территории стран обведены жирной полосой, подскажите плиз, о чем почитать, чтобы смочь сделать также:


а сама полоса - LineRenderer с точками по нужным вершинам гексов