- Aim helper (рассчет отскока от ракетки и текущая траектория шарика)
- Bricks collision drawer (показывает восьмиугольники, соотв. кирпичам, линии которых при пересечении центра шарика вызовут отскок
- God Mode (отскок от нижней границы мира без потери жизни)
- Scaling шарика по Y, делает scaling по горизонтали неудобным и создает иллюзию о ширине шарика относительно других объектов (к примеру, ракетки).
- использован расчет пересечения прямых с хитбоксами объектов
- для хитбоксов кирпичей использованы восьмиугольники
- для хранения кирпичей и других игровых не уникальных сущностей использован std::vector, при уничтожении кирпича память очищается, при подборе/исчезании бонуса с карты вектор чиститься, кирпичи в smart pointer'ах
- Для того чтобы не пробегать по всем кирпичам во время каждого апдейта, происходит рассчет возможных задетых кирпичей при переходе из prev_pos в prev_pos + vec * elapsed, среди которых и проводится поиск удара. Снижение затратности с O(N^2) до ~O((rad / (padding_x + brick_w) + 1) * (rad / (padding_h + brick_h) + 1))
- Для оптимизации памяти при работе с std::vector использованы emplace'ы, где можно
- Минимальные значения размера мира зависят от параметров шарика и ракетки
- Реализованы основы Арканоида (управление ракеткой, отскок от ракетки по формуле от расстояния до центра, удары по блокам, отскоки от границ экрана, жизни, очки и рекорд сессии)
- Каждый ряд имеет свое значение очков для блоков в нем в зависимости от ряда (если не включена функция "Random brick scores")
- Взрывные кирпичи с разными паттернами вызрыва (круговой, диагональ, вертикаль, горизонталь)
- Бонусы (+шар, +жизнь и превращение случайного кирпича во взрывной)
- Возможность выбрать начальную позицию для запуска мяча
- Подбор шарика даже если центр шарика опустился ниже поверхности ракетки (вплоть до 0.5 высоты ракетки)
- Мультипликатор очков в зависимости от скорости шарика и размера ракетки.
- Статистика в конце игры
- Чем больше радиус шарика, тем больше заметна визуальная погрешность при ударе о восьмиугольную коллизию. Решается более точным рассчетом, к примеру, с использованием уравнений эллипса для каждого угла, как в бильярде и других играх, где необходима точность.
- При больших скорости и радиусе шарика возможно "пробивание" ряда, опять же скорее всего из-за восьмиугольной коллизии.