Skip to content

medtereus/WebGamepad2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WebGamepad2

Превращает смартфон или любое устройство с браузером в беспроводной мост для передачи ввода с геймпада на компьютер.

Описание

WebGamepad — система передачи ввода с геймпада через браузер, написанная на Go.

Проект поднимает веб-страницу, которая получает данные от подключённого к устройству геймпада через Gamepad API браузера и передаёт их на сервер по локальной сети. Сервер принимает события ввода и эмулирует виртуальный геймпад на хостовой машине через подключаемые драйверы.

Изначально проект был создан как решение проблемы несовместимости и нестабильной работы некоторых геймпадов на ПК. Вместо прямого подключения контроллер подключается к смартфону, после чего браузер на смартфоне передаёт ввод на компьютер через WebGamepad.

На практике система использовалась для реальных игр и обеспечивала задержку порядка 50 мс, которая субъективно практически не ощущалась во время игры.

Возможности

  • Передача ввода с геймпада через браузер
  • Поддержка нескольких драйверов виртуального геймпада (Windows)
  • Низкая задержка передачи ввода
  • Работа по локальной сети
  • Серверная часть на Go

Практическая часть

Зависимости

Установка

  1. WebGamepad2 - распаковать zip в удобное место.
  2. Выбрать и установить любую зависимость [[#Зависимости]] согласно вашему случаю.

Запуск

Короче:

  1. Запуск(или пропуск шага) драйвера
  2. Запуск WebGamepad2
  3. Подключение геймпада к телефону
  4. Зайти с телефона на странцу через локальную сеть
  5. ???
  6. PROFIT!!!!111

Длиннее:

  1. Драйвер ввода. Если у вас:
    1. VGP: Запустить его.
      1. Сперва - настройки! Preferences
        1. Проверить порт! По умолчанию стоит 0.
          1. Webgamepad2 использует порт 2233.
          2. После первого запуска Webgamepad2 - сгенерируется config.toml. Там можно настроить под себя
        2. Input Execution Method -> VirtualGamepad
      2. Start server
    2. viGemBus: Пропускаем этот шаг. Если я правильно понял, то это околодрайвер. И в винде он есть всегда.
  2. Запустить бинарник WebGamepad2_prod_linux (Ну, или WebGamepad2_prod_windows.exe если винда).
    1. Это запустит веб-сервер с одной страницей.
    2. Адрес по умолчанию: (IP вашего ПК в локальной сети):8081
  3. Подключить геймпад к телефону.
  4. Зайти на страницу с телефона.
  5. Двинуть стик, или нажать кнопку геймпада.
    1. Если всё работает - то JS распознал геймпад, и теперь пустые поля имеют меняющися статус текущего ввода.
    2. Чисто технически, эта страница теперь спамит текущим состоянием геймпада в адрес ПК.
      1. static/js.js -> setInterval -> строка 197: }, 60)
      2. 60 - время в милисекундах между отправками статуса.
      3. При 50, и ниже ввод начинает тупить. Может виноват старый процессор(AMD FX-6400), но судя по всему - пк начинает захлёбываться в потоке данных.
      4. Менять на свой страх и риск.

Ограничения

  • Проект рассчитан на работу в локальной сети.
  • Поддерживаются только драйверы, перечисленные в разделе "Зависимости".
  • Производительность может зависеть от оборудования и качества сети.

Используемые технологии

  • Go
  • Gin
  • JavaScript
  • Gamepad API
  • TOML
  • Colfer
  • ViGEmBus
  • Virtual GamePad

Version History

  • 2.0
    • Первый публичный релиз на GitHub.
    • Ранее проект использовался локально. Без публичных релизов.

Заметки