Разблокировка ядер. Оптимизация MeloDancer ❤️
Многопоточность помогает игре использовать несколько ядер процессора, а не держать всю работу на одном главном потоке.
Но её нельзя просто “включить” для всей игры. Она работает только там, где расчёты можно безопасно разделить.
Лучше всего в отдельные потоки выносить тяжёлые, но независимые расчёты.
Например, враги могут заранее считать свои решения. Один враг выбирает путь, другой оценивает цель, третий готовит атаку. Эти расчёты могут идти параллельно, потому что они пока не меняют мир.
То же самое подходит для света, видимости, анализа карты, поиска пути и подготовки данных для визуала.
Главное правило простое: поток может читать состояние мира - данных, но не должен самовольно их менять.
Поток не двигает персонажа напрямую. Поток не удаляет объект напрямую. Поток не меняет здоровье напрямую.
Он только готовит результат: маршрут, команду, намерение, таблицу света, список видимых клеток.
После этого главный поток собирает результаты и применяет их в правильном порядке.
Это важно, потому что в игре часто есть конфликты. Два врага могут захотеть занять одну клетку. Несколько атак могут попасть в одну цель. Один объект может быть удалён, пока другой пытается с ним взаимодействовать.
Если всё это менять из разных потоков сразу, результат станет случайным и трудным для отладки.
Поэтому хорошая схема такая: параллельно считать, последовательно применять.
Для многопоточности лучше всего подходят простые и стабильные данные: координаты, числа, флаги, массивы, таблицы клеток, снимки состояния мира.
Если архитектура построена так, что все системы напрямую трогают друг друга, многопоточность будет опасной.
Если архитектура разделяет расчёт и применение, потоки можно использовать безопасно.
MeloDancer пока находится в разработке