Клавиши и кнопки руля
Следующая страница, сброс секундомера, скрыть оверлей — действия, которые игрок назначает на клавишу или кнопку руля и нажимает прямо за рулём.
Добавьте действие
Действие — это настройка типа binding. У неё нет значения по умолчанию: назначает её только игрок. Racelink показывает все действия оверлея на отдельной вкладке его настроек, где игрок нажимает клавишу или кнопку, чтобы назначить её.
{
"key": "TOGGLE_VISIBILITY",
"label": "Show or hide",
"type": "binding",
"description": "Hides the overlay, and shows it again"
}Она стоит среди остальных настроек манифеста; в Studio добавляется как любая настройка.
Обработайте нажатие
Нажатие назначенной кнопки никогда не меняет настройку. Racelink присылает оверлею ключ действия, а оверлей сам решает, что оно значит:
overlay.on('action', (action) => {
if (action === 'NEXT_PAGE') showPage(page + 1);
});useEffect(
() =>
overlay.on('action', (action) => {
if (action === 'NEXT_PAGE') setPage((page) => page + 1);
}),
[overlay],
);Переключатель, одинаковый в окне и в OBS
Окно оверлея и его страница OBS — отдельные копии. Переключатель в переменной рассинхронизируется, как только одна из них перезагрузится. overlay.actionCount(action) — сколько раз действие нажато с запуска Racelink; страница, открывшаяся позже, получает это число сразу. Вычисляйте состояние из него:
const applyVisibility = (): void => {
root.hidden = overlay.actionCount('TOGGLE_VISIBILITY') % 2 === 1;
};
overlay.on('ready', applyVisibility);
overlay.on('action', applyVisibility);Покажите, какая кнопка назначена
Значение настройки говорит, что назначил игрок, — для подсказки прямо в оверлее:
const bound = overlay.settings.TOGGLE_VISIBILITY;
// { key: 'Ctrl+1' | null, button: { deviceName: 'Wheel', button: 5 } | null }
hint.textContent = bound.key ?? (bound.button ? `${bound.button.deviceName} ${bound.button.button}` : '');Чтобы попробовать действие во время разработки, добавьте оверлей вашего dev-сервера в макет в Racelink, назначьте действие в его настройках и нажмите.