ASCII Sandbox для красивого рассыпания в игре // Как сделано
Для того чтобы спрайты, боссы и другие объекты в игре красиво рассыпались, я сделал простой ASCII Sandbox движок. В отличие от самой игры, где символы могут рисоваться в произвольных координатах, ячейки в sandbox‑е строго выровнены по сетке. Это дает прикольный визуальный эффект. Алгоритм очень простой — вот схема:
─┼─┼─┼─┼─┼─┼─┼─┼─ │ │ │ │@│ │ │ │ ─┼─┼─┼─┼─┼─┼─┼─┼─ │ │4│2│1│3│5│ │ ─┼─┼─┼─┼─┼─┼─┼─┼─
А. Обходим все ячейки сетки снизу вверх (если гравитация направлена вниз).
Б. Если в ячейке есть символ, и он не в полете, то пытаемся его уронить.
В. Сначала проверяем ячейку снизу (1), если пустая — запускаем символ в полет в нее.
Г. Если снизу занято, то проверяем диагональные ячейки (2) и (3). Если обе пустые, то выбираем случайно. Запускаем символ в полет.
Д. Sandbox у меня скользкий, т.ч. символы могут скатиться и под большим углом. Поэтому проверяем еще и соседние к диагональным ячейки (4) и (5). Если там пусто, то запускаем символ в полет, как в предыдущем пункте.
Этого достаточно — символы сыпяться. Для красоты я добавил еще две штуки: ускорение и саморазрушение.
Если символ без задержек летит по ячейкам сетки вниз, то было бы красиво сделать движение с ускорением. Сделать это просто — нужно только накапливать для каждого символа время непрерывного полета. Наткнулся на другой символ — обнуляем время и ускоряемся заново.
Еще одна штука — саморазрушение. Когда спрайт помещается в sandbox, то в случае, если снизу пустые ячейки, он летит целиком. Это иногда не так эффектно. Поэтому я сделал параметр саморазрушения. Даже если снизу пустота, то отдельные частички‑символы спрайта все равно начинают взаимодействовать друг с другом. На видео я показал сравнение разных степеней саморазрушения.
Как вам эффект? Буду рад, если вам понравился стиль и вы решите поддержите мой проект на Steam страничке игры.
