Документация Steamworks
Общие понятия

Система ввода Steam

«Система ввода Steam» (Steam Input) — это общий термин для всех устройств, программного обеспечения и настроек утилит, которые Steam использует для взаимодействия с играми.

Интерфейс настройки ввода Steam

Интерфейс настройки системы ввода Steam (Steam Input Configurator, SIC) встроен в клиент Steam и находится между игроком и игрой/приложением. Интерфейс ввода получает сигналы от устройства ввода и переводит эти данные должным образом — в зависимости от того, какие настройки установлены у игрока, прежде чем передать их игре.

Интерфейс ввода можно использовать в двух режимах: совместимости (legacy) и в режиме встроенной поддержки (native).

Режим совместимости

Режим совместимости спроектирован для игр, в которых не встроен API ввода Steam. В этом случае интерфейс ввода Steam служит продвинутым интерфейсом для создания раскладки, который любой игрок может использовать для любой игры в Steam.

Игрок может назначить любой элемент ввода в качестве замены для любого другого элемента ввода, к примеру, кнопке A можно назначить функцию кнопки Enter клавиатуры, а полному нажатию на левый триггер можно назначить функцию нажатия на кнопку мыши и т. д. Этот режим может использоваться с любым поддерживаемым устройством ввода, а не только со Steam Controller.

Режим совместимости отлично подходит для игр, которые никогда не поддерживали API, но есть и ограничения. К примеру, игры, написанные исходя из предположения о том, что геймпад и мышь не будут использоваться одновременно, часто страдают от разного рода сбоев, если настройки нарушают это предположение. Кроме того, у игры не будет понимания, что вы используете интерфейс настройки (она просто получает низкоуровневый ввод с устройства, которое имитируется интерфейсом), так что экранные иконки, скорее всего, будут не соответствовать.

Режим встроенной поддержки

В режиме встроенной поддержки игра получает данные о вводе напрямую от интерфейса SCC в виде «действий». Идея состоит в том, что игра сама по себе не имеет знания о том, какие устройства ввода используются для получения данных о действиях, она только знает, что эти действия происходят. Все настройки и раскладки перепоручены интерфейсу настройки ввода Steam. Вместе с тем игра может запросить информацию через специальный вызов API, чтобы узнать, какие элементы устройства ввода привязаны к тем или иным действиям, и отобразить правильные экранные иконки.

API ввода Steam

API ввода Steam — программный интерфейс, который разработчики используют, чтобы напрямую общаться с интерфейсом ввода SIC в режиме встроенной поддержки. API контроллера не обязателен для работы режима совместимости.

Полную документацию можно найти здесь: ISteamInput.

Настройки управления

Игроки могут настроить раскладку управления для любой игры из своей библиотеки полностью под себя, используя режим совместимости, режим встроенной поддержки или даже их сочетание. Эти раскладки называются «настройками управления» и игрок может сделать множество раскладок для одной игры, а также поделиться ими с другими игроками в сети.

Иерархия ввода

Элементы ввода

«Элементы ввода» представляют собой реальные аппаратные механизмы на устройстве ввода, с которым пользователь взаимодействует для генерации данных ввода, которые отправляются его компьютеру. Они могут быть как в цифровой, так и в аналоговой форме. Примеры элементов ввода включают в себя кнопки, джойстики, крестовины, бамперы, триггеры, переключатели, миниджойстики, трекболы, тачпады, гироскопы и т. д.

Мы перейдём к более абстрактным понятиям позже, так что просто помните, что элементы ввода — это маленькие штучки на устройстве ввода, по которым ваши пальцы елозят туда-сюда.

Источники ввода

«Источник ввода» — область устройства ввода, которая может рассматриваться как модульный блок, к которому можно применить разные режимы, которые меняют то, как этот блок отправляет данные.

Я же говорил, что всё будет очень абстрактно!

Перейдём к конкретике: в чём разница между крестовиной и четырьмя лицевыми кнопками, расположенными в форме ромба?

input_dpad.pnginput_bpad.png

В обоих случаях у них есть четыре цифровые «кнопки», но крестовины спроектированы таким образом, что одновременно нажать Вверх и Вниз или Влево и Вправо не получится, в то время как лицевые кнопки независимы друг от друга. Тем не менее система ввода Steam позволяет вам наложить ограничения крестовины на лицевые кнопки.

Так что хотя крестовина и группа лицевых кнопок каждая состоит из четырёх индивидуальных элементов ввода, удобно рассматривать «крестовину» и «лицевые кнопки» как блоки, так что мы можем изменить поведение всего блока.

Полный список «источников ввода»:

  • левый трекпад
  • правый трекпад
  • центральный трекпад
  • левый джойстик
  • правый джойстик
  • ABXY
  • крестовина
  • левый триггер
  • правый триггер
  • гироскоп
  • переключатели
Примечание: «переключатели» — это просто общее понятие для элементов ввода, которые не принадлежат другим группам, таких как кнопки «назад» и «старт», левый и правый бамперы, а также хваты позади контроллера.

См. также:

Режимы источников ввода

К источникам ввода могут быть применены различные режимы, которые меняют их поведение. Хотя их можно использовать и для цифровых элементов ввода, чаще режимы источников ввода используются на аналоговых элементах управления, особенно на трекпадах, которые можно настроить многими способами.

Полный список «режимов источников ввода»:

  • Крестовина
  • Четыре кнопки
  • Абсолютное позиционирование мыши
  • Относительное позиционирование мыши
  • Движение джойстика
  • Джойстик-мышь
  • Джойстик-камера
  • Колёсико
  • Триггер
  • Сенсорное меню
  • Джойстик с функциями мыши
  • Области действия мыши
  • Круговое меню
  • Переключатели

См. также:

Краткое обобщение:

Элементы ввода (Physical Inputs):
Физические объекты на устройстве, с которыми взаимодействует игрок. К примеру, кнопка A, кнопка «вверх» на крестовине и т. д.

Источники ввода (Input Sources):
Более общая структура, объединяющая отдельные элементы устройства ввода в модульный блок. К примеру, вся крестовина, четыре лицевые кнопки ABXY, весь левый джойстик и т. д.

Режимы источников ввода (Input Source Modes):
Поведение, которое назначается источнику ввода. Пример: «Пусть лицевые кнопки ведут себя как DPAD» или «Пусть левый джойстик ведет себя как ABXY» и т. д.

Действия

Действия — это события, которые API ввода Steam использует для управления всем. В режиме встроенной поддержки игра получает не событие «кнопка A нажата», а событие «Прыжок», и то, какой ввод вызывает «Прыжок», полностью в руках игрока.

Цифровые действия

Цифровые действия — простейшие и самые распространённые виды действий. Это просто вкл./выкл., так что игра просто циклически опрашивает и слушает состояния этих действий.

Аналоговые действия

У аналоговых действий есть одна или несколько осей данных, и они используются для таких вещей как плавное движение персонажей, пилотирование автомобилей, управление камерами и т. д. Стандартные действия, управляемые джойстиком и мышью, обычно имеют две оси, X и Y, но и одноосные аналоговые действия также возможны (обычно они привязаны к аналоговым триггерам). В таких случаях данные будут передаваться по двум осям, но значение по оси Y всегда будет равно нулю.

Название действия

Всем действиям необходимо дать названия, такие как JUMP или PUNCH. Эти строковые значения не являются текстом, которые видит игрок. Они называются «метки действий» (Action Labels) и могут быть локализованы.

Дескриптор действий

Опрос действий, если он будет основан на их названиях, будет ресурсозатратен и неэффективен, поэтому когда игра инициализирует API, игра должна зарегистрировать названия действий, получив в ответ дескрипторы (action handles) с соответствующими целочисленными значениями.

Источник действия

Источник действия (action origin) — строка, которая идентифицирует, какой ввод привязан данному действию в устройстве ввода.

Набор действий

Набор действий (action set) — логично организованная группировка связанных действий. Только один набор действий может быть активен для одного устройства ввода в один момент времени. К примеру, вы можете создать набор действий «Меню», который будет активен только при выполнений действий в меню, а также наборы «В машине», «Пешком» и «В полёте» для игры, подобной GTA V, в которой есть несколько режимов для управления транспортом и для движений. Наборы действий существуют как в режиме встроенной поддержки, так и в режиме совместимости. В режиме встроенной поддержки наборы эксплицитно определены разработчиком и игра будет отправлять API-вызовы, чтобы обозначить, какой набор сейчас активен. В режиме совместимости игрок самостоятельно должен переключаться между наборами действий. В обоих случаях наборы действий дают возможность освободить место на устройстве ввода, убрав необходимость намертво привязать каждое действие, которое может произойти где угодно в игре, и всегда держать его активным.

Слои наборов действий

Слои наборов действий — это необязательные наборы раскладок действий, которые могут быть наложены на существующие наборы. В отличие от наборов действий, слои получают действия от наборов действий, внутри которых они заданы, и не заменяют полностью всё, что было задано на момент их применения: они представляют собой небольшие изменения. Они могут быть как изменением настроек, так и добавлением или удалением привязок действий из базового набора действий. Одновременно могут быть использованы несколько слоёв, которые будут применены последовательно.

Дополнительная информация доступна в разделе Слои наборов действий.

Обратная связь

Помимо того, что происходит на экране, некоторые устройства ввода дают возможность дать игроку обратную связь с помощью вибрации и света.

Отдача

Благодаря очень точным физическим ощущениям игрок может понять, где расположены его руки и пальцы на больших сенсорных поверхностях, равно как и почувствовать испульс от эмулированного трекбола. Отдача поддерживается на устройствах Steam Controller и некоторых контроллерах для Nintendo Switch. Устройства, не поддерживающие отдачу, прогнорируют вызовы API.

Вибрация (rumble)

Более традиционная форма физической обратной связи, вибрация является результатом колебаний внутренних моторчиков, которые трясут устройство ввода. Эту функцию поддерживают контроллеры Playstation 4 и Xbox, а также множество устройств, совместимых с XInput. У Steam Controller нет настоящей вибрации, но он эмулирует её, используя тактильную отдачу (и, соответственно, будет отвечать на запрос API на вибрацию).

Cветодиоды

И у Steam Controller, и у контроллера Playstation 4 есть встроенные светодиоды. У Steam Controller свет всегда белый, а у контроллера Playstation 4 светодиод можно запрограммировать на цвета всего спектра. Оба устройства ответят на запрос API на смену цвета, но Steam Controller излучает только монохромный свет и просто изменит яркость. Для контроллера Playstation 4 можно менять и цвет, и яркость. Устройства без светодиодов просто проигнорируют вызовы API.