Превращает смартфон или любое устройство с браузером в беспроводной мост для передачи ввода с геймпада на компьютер.
WebGamepad — система передачи ввода с геймпада через браузер, написанная на Go.
Проект поднимает веб-страницу, которая получает данные от подключённого к устройству геймпада через Gamepad API браузера и передаёт их на сервер по локальной сети. Сервер принимает события ввода и эмулирует виртуальный геймпад на хостовой машине через подключаемые драйверы.
Изначально проект был создан как решение проблемы несовместимости и нестабильной работы некоторых геймпадов на ПК. Вместо прямого подключения контроллер подключается к смартфону, после чего браузер на смартфоне передаёт ввод на компьютер через WebGamepad.
На практике система использовалась для реальных игр и обеспечивала задержку порядка 50 мс, которая субъективно практически не ощущалась во время игры.
- Передача ввода с геймпада через браузер
- Поддержка нескольких драйверов виртуального геймпада (Windows)
- Низкая задержка передачи ввода
- Работа по локальной сети
- Серверная часть на Go
- Windows - (https://github.com/nefarius/ViGEmBus/releases/tag/v1.22.0)
- Для работы WebGamepad2 используется https://github.com/openstadia/go-vigem
- Для этого нужны соответствующие dll. Исходные ссылки умерли.
- В релизе лежат версии для x86 и x64. В папке с проектом должна быть только одна dll!
- Т.е. вытащить на уровень вверх нужную dll.
- Windows/Linux - (https://github.com/kitswas/VirtualGamePad-PC/releases)
- WebGamepad2 - распаковать zip в удобное место.
- Выбрать и установить любую зависимость [[#Зависимости]] согласно вашему случаю.
Короче:
- Запуск(или пропуск шага) драйвера
- Запуск WebGamepad2
- Подключение геймпада к телефону
- Зайти с телефона на странцу через локальную сеть
- ???
- PROFIT!!!!111
Длиннее:
- Драйвер ввода. Если у вас:
- VGP: Запустить его.
- Сперва - настройки!
Preferences- Проверить порт! По умолчанию стоит
0.- Webgamepad2 использует порт
2233. - После первого запуска Webgamepad2 - сгенерируется
config.toml. Там можно настроить под себя
- Webgamepad2 использует порт
Input Execution Method-> VirtualGamepad
- Проверить порт! По умолчанию стоит
Start server
- Сперва - настройки!
- viGemBus: Пропускаем этот шаг. Если я правильно понял, то это околодрайвер. И в винде он есть всегда.
- VGP: Запустить его.
- Запустить бинарник
WebGamepad2_prod_linux(Ну, илиWebGamepad2_prod_windows.exeесли винда).- Это запустит веб-сервер с одной страницей.
- Адрес по умолчанию: (IP вашего ПК в локальной сети):8081
- Подключить геймпад к телефону.
- Зайти на страницу с телефона.
- Двинуть стик, или нажать кнопку геймпада.
- Если всё работает - то JS распознал геймпад, и теперь пустые поля имеют меняющися статус текущего ввода.
- Чисто технически, эта страница теперь спамит текущим состоянием геймпада в адрес ПК.
- static/js.js -> setInterval -> строка 197:
}, 60) - 60 - время в милисекундах между отправками статуса.
- При 50, и ниже ввод начинает тупить. Может виноват старый процессор(AMD FX-6400), но судя по всему - пк начинает захлёбываться в потоке данных.
- Менять на свой страх и риск.
- static/js.js -> setInterval -> строка 197:
- Проект рассчитан на работу в локальной сети.
- Поддерживаются только драйверы, перечисленные в разделе "Зависимости".
- Производительность может зависеть от оборудования и качества сети.
- Go
- Gin
- JavaScript
- Gamepad API
- TOML
- Colfer
- ViGEmBus
- Virtual GamePad
- 2.0
- Первый публичный релиз на GitHub.
- Ранее проект использовался локально. Без публичных релизов.
- https://github.com/pascaldekloe/colfer
- Colfer is a binary serialization format optimized for speed and size.