Найти в Дзене
Kenu Len

Мобильный геймпад на Godot. Часть 3: Сервер, клиент, Broforce

Чтож, вот и финал. Спустя клиента на Godot, который может отправлять данные о нажатия, нужен сервер - для приема и отправки на ViGem. Итак, серверная часть. Тут не так и много магии, как могло бы показаться. Так как способ отправки данных из прошлой части имеет нюанс - Json объект может отправляться кусками, то на сервере мы его собираем: строки 105, 130-134. То есть собираем данные пока не получим символ } - конец объекта. Функции left_joystick_float, right_joystick_float, press_button и release_button встроены в библиотеку vgamepad, которую можно спокойно установить через pip. И все. Сервер принимает данные, смотрит какая метка в j_data['M']: Остальные данные это координаты стика или же конкретная кнопка. Дальше данные передаются драйверу. На этом магия кончается. Написание такого рода материала для меня хороший способ поднять мою ленивую жэпу и поделать какие-то дела, напрячь мозг хоть немного. Ещё так удобно закреплять знания в голове. Для меня сплошные плюсы, а вам... может узна
Оглавление

Чтож, вот и финал. Спустя клиента на Godot, который может отправлять данные о нажатия, нужен сервер - для приема и отправки на ViGem.

Сервер

Итак, серверная часть. Тут не так и много магии, как могло бы показаться.

-2
  • get_ip - функция получения текущего ip сервера. ip назначается маршрутизатором, потому может меняться и желательно знать актуальный ip для того, чтобы показать его клиенту;
  • get_port - тут много не заморачивался и задал статичный, хотя можно проверять порт на занятость и искать любой свободный.

Так как способ отправки данных из прошлой части имеет нюанс - Json объект может отправляться кусками, то на сервере мы его собираем: строки 105, 130-134. То есть собираем данные пока не получим символ } - конец объекта.

-3

Функции left_joystick_float, right_joystick_float, press_button и release_button встроены в библиотеку vgamepad, которую можно спокойно установить через pip. И все. Сервер принимает данные, смотрит какая метка в j_data['M']:

  • LJ - левый стик;
  • RJ - правый стик;
  • P - кнопка нажата;
  • U - кнопка отжата.

Остальные данные это координаты стика или же конкретная кнопка. Дальше данные передаются драйверу. На этом магия кончается.

Заключение

Написание такого рода материала для меня хороший способ поднять мою ленивую жэпу и поделать какие-то дела, напрячь мозг хоть немного. Ещё так удобно закреплять знания в голове. Для меня сплошные плюсы, а вам... может узнали что-то новое. Честный обмен :) Д-а-а-а, там еще есть части с экспортом в apk, установками sdk, настройками окна в проекте, но опять же это все для формата туториала, чем данный цикл статей, увы, не является. Теперь, как и обещал, ссылка на полный код. Хотел на git, но потом решил на ЯндексДиск скинуть сразу и готовый apk, если не хотите собирать самостоятельно, и код и драйвер.

Ссылка на видео с игрой в Broforce на таком вот импровизированном геймпаде, на случай, если вам кажется игра на этом деле невозможной.

Глупо спорить, что это жуть как неудобно. Вещь жизнеспособная, ситуативная, забавная. Мне было приятно делать этот геймпад и смешно на нем играть.