Железнодорожный tileset 2.0
С год назад выпустил я пост, про модель построения железнодорожной сети на квадратных тайлах: вот этот. И вроде как обычно, никому он был не нужен, пока в анналах пикабу не откопал его за своим интересом товарищ @milk66regBRZ, который очень верно раскритиковал некоторые моменты предложенной мной модели, вот в этом посте, и в стремлении избежать оных, для своих нужд создал модель построения ж/д сетки на шестиугольных тайлах, то бишь гексах. И получилось весьма удачно, надо признать. Но всегда есть но. И это "но" состоит в том, что при построении на гексах, дорога может быть прямой только по шести направлениям или же по трём осям. Тем не менее, такая модель находит свою реализацию в игровых проектах и вполне доказала своё право на жизнь, в первую очередь своей простотой. Ж/Д сетка на квадратных же тайлах имеет то премущество, что у неё 8 направлений или же 4 оси, то есть на одну больше, нежели у гексовой, благодаря чему она становится куда приятней глазу и интуитивно понятней. Такая модель как раз используется в OTTD, Factorio и многих других играх с железными дорогами.
За сим имеем приблизительное техзадание: нужен такой tileset, чтобы был хорош, как квадратный, но при этом прост, как гексовый, и чтобы мог быть полезен не только в рамках компьютерной игры, а даже и для модели железной дороги в реале.
Перевести гексовый tileset на 4 оси задачка явно со звёздочкой, так что попробуем просто выпилить баги в квадратном.
Для начала, есть проблема со стыковкой диагональных путей через углы. И действительно, через середину стороны тайла стыковать пути куда разумнее.
Лёгким движением руки заменяем квадрат на восьмиугольник. Теперь любой диагональный путь будет проходить тоже через середину стороны тайла, а не через угол, как у квадрата.
Решаем одну проблему, получаем следующую: октагон не является фигурой замощения плоскости. Буквально, если попытаться замостить плоскость восьмиугольниками, то между ними останутся пустые квадраты:
Это вам не гексы.
Само собой напрашивается, что надо вводить дополнительные квадратные тайлы:
Выглядит сложновато. Два набора тайлов, один из которых нужен строго для соединения диагональных путей... Но зато как минимум возможность сделать перекрёсток на диагональных путях теперь исключена.
Вообще, можно очень просто избавиться от этих дополнительных квадратов. Располовинить их и присоединить к основным тайлам:
Теперь это более сложные многоугольники.
И действительно: тайл, имеющий на себе диагональное ответвление, однозначно требует такого же ответвления от тайла, который продолжает его путь. Это значит, что выступы будут всегда находиться там, где и должны. Возрадовашись удачно сложившимся законам планиметрии, я сделал базовый набор без вращений и отражений:
Выглядит странно, но это только пока что. Дальше ещё страннее.
А вот уже полный набор из 10 основных тайлов, с комбинациями и отражениями:
Вообще, как выяснилось в процессе, тайлы не обязаны быть одинаковыми, чтобы всё работало.
Как видим, теперь сетка строится ещё проще, плюс перекрёстки на диагоналях не сделать. То есть и функционал не подорван, и баги пофикшены; цель достигнута:
Перекрёсток не создать из-за того, что получается наслоение тайлов.
Ну а если всё-таки очень хочется, то на этот случай есть вот такие штуки:
Тоннели!
С ними вообще хорошо, а главное, ещё ближе к тому, как решаются проблемы прокладки путей в реальности:
Тоннели только прямые, чтоб путаницы не вышло.
Такая вот доработанная получилась штука. SVG с тайлами для поиграться тут.
Вот, кстати, ещё развязка на 8 направлений, раз уж я её сделал:
На гексах развязка получается только на 6 направлений, это в качестве частного примера "на пальцах".
Пост о том, почему практически все игры про логистику такие унылые, чем они страдают, и какой должна быть хорошая игра в этом жанре (по мнению автора сего поста, то бишь меня), выйдет следующим.