Вызов ActivateActionSetLayer требует мало ресурсов, поэтому его можно спокойно вызывать несколько раз (но см. выноску ниже).Осторожнее с несколькими слоями!
Несмотря на то, что вы можете применять слои наборов действий каждый кадр, поступать так не рекомендуется, особенно если вы используете более одного слоя. Последний применённый слой будет иметь приоритет над любой несогласующейся информацией, пришедшей ранее, так что рекомендуется особенно внимательно проверять их порядок. В коде могут наблюдаться состояния гонки (race conditions) или иные трудноуловимые баги, которые могут изменить порядок слоёв.
Слои набора действий предназначены для небольшого числа случаев, поэтому рекомендуется применять и удалять их только во время конкретных изменений состояния игры.
Для игр со встроенной поддержкой системы ввода Steam разработчик может задать конкретные слои наборов действий, которые будут активироваться в коде игры. В дополнение к этому, в режиме совместимости игроки могут сами задать слои наборов действий и элементы ввода, которые активируют их, точно так же, как они могут задать наборы действий, которые активируются игроками.Практический пример
Представьте себе основанный на классах шутер с транспортными средствами. У этой игры есть встроенная поддержка системы ввода Steam, в ней используются слои наборов действий. В обычных условиях активирован базовый набор действий, в которым заданы такие действия как перемещение, сбор предметов, прыжки и т. д.
Когда игрок выбирает класс, добавляется соответствующий слой, к примеру, «снайпер».
Код в этом случае может выглядеть примерно так:
void changeClass(EClassID myClass)
{
if(myClass == SNIPER)
{
SteamInput()->ActivateActionSetLayer( controllerHandle1, sniperLayerHandle );
}
//logic for other classes
}
Если игрок входит в транспортное средство или выходит из него, включается или выключается управление для соответствующего состоянию игры слоя, при этом добавляются или удаляются элементы ввода для конкретных функций управления ТС.
void changeVehicle(EVehicleID myVehicle, bool entering)
{
InputActionSetHandle_t layerHandle;
if(myVehicle == AUTOMATIC)
{
layerHandle = automaticHandle; //автоматическая коробка передач -- руль, газ, тормоз
}
else if(myVehicle == STICK_SHIFT)
{
layerHandle = stickShiftHandle; //ручная коробка передач -- руль, газ, тормоз, сцепление, переключение передач и т. д.
}
if(entering)
{
SteamInput()->ActivateActionSetLayer( controllerHandle1, layerHandle ); //включаем слой набора действий, когда игрок зашёл в транспортное средство
}
else
{
SteamInput()->DeactivateActionSetLayer( controllerHandle1, layerHandle ); //выключаем слой набора действий, когда игрок вышел из ТС
}
}
В этой игре могут использовать оружие, даже находясь в транспортном средстве. Поэтому когда снайпер использует прицел на снайперской винтовке, это активирует третий слой набора действий, вне зависимости от того, передвигается ли персонаж пешком или в транспортном средстве.
void useScope(bool entering)
{
if(entering)
{
SteamInput()->ActivateActionSetLayer( controllerHandle1, scopeHandle ); //применяем слой прицела, когда персонаж прицеливается
}
else
{
SteamInput()->DeactivateActionSetLayer( controllerHandle1, scopeHandle ); //убираем слой прицела, когда персонаж опускает оружие
}
}
Вот как будет выглядеть наложение всех слоёв:
Обратите внимание, что слои могут не только добавлять новые действия к более ранним слоям, но и переопределять предыдущие раскладки. В данном случае, тормоз (brake) и газ (gas) из набора «транспортное средство» замещают прыжок (jump) и взаимодействие (interact) из базового набора (которые привязаны к трекпаду и джойстику), и затем в свою очередь замещаются прицеливанием (aim) из слоя набора действий «прицел». Поскольку все три слоя набора действий наложены один на другой, единственным оставшимся из базового набора действием будет стрельба (shoot).Режим совместимости
Создание слоя набора действий аналогично созданию обычного набора действий. Просто нажмите кнопку «Добавить слой набора действий» в настройках:
Здесь вы можете дать слою набора действий название и указать сочетания клавиш для него. Поскольку это слой набора действий в режиме совместимости, у игры нет информации о нём, и игроку потребуется активировать его самостоятельно. Решите, какой элемент ввода активирует слой набора действий, откройте меню сочетаний клавиш, нажмите на иконку активации набора действий, которая расположена слева в ряду специальных иконок.
Это действие открывает меню активации набора действий:
В данном случае мы хотим применить слой, а не активировать набор действий. Поэтому в выпадающем меню выберите «Применить слой действий»:
Наконец, выберите слой, который вы хотите применить:
Ту же процедуру можно использовать, чтобы назначить отдельное сочетание клавиш или чтобы удалить слой.