Sandbox часть 3

В прошлой части я рассказал немного о генерации сетки и теперь пришло время эту сетку изменять. Так как я решил что при изменении ландшафта у меня будет изменяться не только та ячейка которую меняет игрок, но и в некоторых случаях соседние, но для этого нужно чтобы эта ячейка "знала" о них, как бы не странно это звучало. Вот я накидал схемку расположения :

Sandbox часть 3 Gamedev, Моё, Sandbox, Длиннопост

Синие точки это вершины, жирные синие точки это основные вершины, именно с ними будет взаимодействовать игрок, зеленым маркером я обвел ячейку. Как видно на схеме каждая ячейка, если она не находится в крайнем ряду или крайнем столбце имеет 8 соседних ячеек и если провести линию между двумя основными вершинами между ними всегда будет находиться одна промежуточная. Пройдя по массиву ячеек можно создать некоторое подобие LinkedList сохранив в ячейке ссылки на её соседей, только список получается не двунаправленный а аж восьминаправленный) Таким образом допустим наша ячейка знает о соседе справа, а сосед справа знает о своем соседе справа и так можно обойти весь список просто задав направление.

Для чего же это нужно? Это нужно в первую очередь для того чтобы mesh менялся более реалистично, ведь я уже говорил о том что игрок взаимодействует только с основной вершиной. Допустим высота основной вершины была увеличена на 1 . Ячейка берет высоты соседних основных вершин по очереди и устанавливает в промежуточных (мелкие синие точки на схеме) среднее арифметическое между собой и соседней основной вершиной. Ну а осыпание это уже мелочи по сравнению с тем что было выше. просто при повышении или понижении высоты проверяются перепады с соседними клетками, и если он после изменения станет больше чем нужно, то изменение не происходит, а вызывается (рекурсивно) тот же самый механизм но уже для той ячейки с которой не выполнилось условие и так далее пока оно не выполнится. Получилось жутко занудно, сам от себя не ожидал, но как без занудства объяснить это я не знаю, разве что за бутылочкой исчеркав пару блокнотов))

Sandbox часть 3 Gamedev, Моё, Sandbox, Длиннопост

Вот как то так это выглядит после изменения. На сегодня думаю хватит информации. До новых встреч!

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"