Checkmate, mate # OP 947379 В конец треда | Веб
Давно участвовали в Dungeon Crawler Jam 2023 и сделали игру про шахматы (отчасти). Она вышла сыроватой, но с потенциалом и интересной концепцией. Мы ее сильно изменили, оставив основные элементы, и теперь планируем выкладываться в стиме. На итче можно поиграть в старую версию игры. Здесь буду выкладывать некоторые новости и инсайды по игре.

Itch.io: https://autremelon.itch.io/checkmate-mate
# OP 2 947384
Уже сделано:
Редактор уровней
Интеллект всех фигур
Техническая часть руки игрока
Обновленный визуал локаций
* Новые геймплейные системы, улучшающие игровой опыт
# OP 3 947683
кстати, при работе над картой invasion возник баг, на который пришлось потратить несколько часов на исправление.

в чем суть:
почти все в проекте работает через шину событий. карта invasion подписана на шину и имеет одну реакцию на событие входа в комнату, в которой прописано, что все непешки умирают, а на их месте спавнятся пешки (а при спавне любая фигура сразу подписывается на шину событий). в итоге получается ситуация, что во время рассылки событий появлялись новые подписчики. код проходит по списку подписчиков методом ForEach, который не допускает модификаций списка, всякий раз вызывая ошибку.

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

для решения этой проблемы я ввел переменную, которая отражает глубину вызовов событий. при обработке события, не вызванного другим событием, переменная равна 0, ее значение увеличивается на единицу при обработке следующего связанного события, и вычитается на единицу после того, как все подписчики получили событие. по сути, переменная отражает количество событий в цепочке, которое привело к обработке текущего события.

теперь проблему со спавном фигур описать проще: если глубина события во время регистрации какого-либо подписчика больше нуля, то вызывается ошибка, так как в этот момент идет раздача событий. чтобы это исправить, я добавил проверку этой переменной в начало метода регистрации подписчика: если она равна 0, то регистрация происходит прямо сейчас, а если нет, то она откладывается до момента, пока обработка всех событий на закончится.

в итоге я и карту сделал, и весь код шины переписал
4 947684
прикольно )
Обновить тред
« /gd/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах.Подробнее