Как я заставил ESP8266 рисовать 3 D, стрелять и летать: полный технический разбор кода

Привет, Хабр!
В первой части я рассказал про железо, сборку корпуса и немного затронул программную реализацию. Сегодня — самое вкусное. Мы заглянем в исходники проекта и разберем математику, алгоритмы и оптимизацию под слабое железо.
Код написан на C++ в Arduino IDE, весь проект живет в одном файле. У нас три игры
(но в исходнике их уже пять), которые переключаются конечным автоматом через gameState.
Блок 1: Raycast — 3D на коленке
Сердце движка — DDA-алгоритм (Digital Differential Analyzer). Мы не рендерим 3D-полигоны, мы пускаем 320 лучей из точки игрока и смотрим, где они пересекают сетку 32x32.


















