Авторы описывают технические решения и доработки при создании физического контроллера-удочки, который эмулирует обычный геймпад. Для игры не потребовались отдельные маппинги: система видит только стандартные оси и кнопки. Если донгл не получает сигнал 300 мс, он автоматически центрирует оси и отпускает все кнопки, чтобы избежать «убегающих» персонажей.
Ключевые технические задачи
Непрерывное вращение и управление камерой
Проблема: при остановке «кручения» удочки виртуальный стик возвращался в центр, что давало резкий скачок угла и микроподлагивания («так-так»).
Решение 1: при остановке вращения вектор виртуального стика «замораживается» на окружности, чтобы дельта угла стала нулевой и движение выглядело непрерывным.
Побочный эффект: камера в третьем лице начинала бесконечно вращаться, так как стик оставался отклонён на ~95%.
Решение 2: добавлен таймаут 500 мс: в течение коротких пауз продолжать «заморозку» для плавности, но если активности нет больше полусекунды — считать ввод неактивным и вернуть стик в центр.
Распознавание жеста заброса
Жест «заброса» определяется по одновременному превышению порогов линейного ускорения и угловой скорости. В прошивку встроены трекеры пиков, которые записывают реальные взмахи руки. Пороги выставляются на уровне 60–70% от зафиксированных пиков, затем вводится «кулдаун», чтобы один замах не вызывал несколько срабатываний.
Обработка нажатий и дебаунс
Микроподпрыгивания тактильных кнопок сбрасывали таймер удержания и ломали логику long press. Проблему решили программным дебаунсом и изменением логики: короткое нажатие срабатывает один раз по отпусканию кнопки, но только если порог долгого удержания так и не был достигнут.
Аппаратная самодиагностика
Чтобы находить обрывы и замыкания (например, из-за смещённых пин-хедеров) без мультиметра, при загрузке прошивка опрашивает пины с помощью внутренних подтяжек к питанию и к земле. Так автоматически выявляются открытые цепи и короткие замыкания.
Особенности зарядки по USB-C
Используемое USB-C удлинение без конфигурационных резисторов (CC-пинов) не позволяет современным C-to-C зарядкам корректно подать питание. В итоге устройство надёжно заряжается только через кабели USB-A–USB-C, работающие по «старому» стандарту.
Выводы
- Физический контроллер можно интегрировать как обычный геймпад, без спецподдержки в игре.
- Для плавного вращения важно управлять не только центровкой стика, но и таймингами «заморозки» вектора.
- Распознавание жестов требует записи реальных движений, настройки порогов и кулдауна.
- Программный дебаунс и чёткое разделение short/long press критичны для надёжного ввода.
- Аппаратная самодиагностика и учёт нюансов USB-C упрощают поддержку и эксплуатацию устройства.