Как всё связано
- 01Активные блоки шлют сигнал
- 02Клетки считают входы
- 03Блоки пересчитываются
- 04Instanced-отрисовка
- 05Bloom
01
От школьного проекта до ремастера
Первая версия вышла, когда у меня в профиле ещё было написано «Java programmer from Russia». Ремастер оставил идею, а всё остальное переписано на современном C++.
02
Симуляция
- 16 типов блоков на бесконечной 2D-сетке.
- Событийная модель: пересчитывается только то, что изменилось, от 2 до 65 536 тиков в секунду.
- Сигнал проходит один блок за тик, а провода, сходящиеся в одну клетку, работают как OR.
- Вентили считают входы, а не читают два фиксированных пина: AND значит «хотя бы два», XOR значит «нечётное число». Поэтому полный сумматор собирается из одного XOR и одного AND.
03
Что в нём собирают
Примеры идут от RS-триггера и сумматоров к 8-битному сумматору с семисегментными индикаторами и, наконец, к автономному 16-битному компьютеру на SUBLEQ, который работает прямо внутри песочницы.
04
Под капотом
- Instanced-рендеринг и HDR bloom, так что тысячи светящихся проводов не тормозят.
- Undo и redo, а автосейв переживает даже краш.
05
Стек
C++20, OpenGL, ImGui и CMake.