Один оверлей для всех игр
Большинство полей одинаковы во всех играх, но не все. Здесь — как узнать, что даёт запущенная игра, и как оверлею хорошо выглядеть, даже если каких-то данных нет.
Для каких игр оверлей
Это указывается в манифесте: "*" — все игры с телеметрией, или список конкретных игр. Racelink предлагает оверлей только в этих играх.
"games": "*"
"games": ["iracing", "le-mans-ultimate"]Выбирайте "*", если оверлей показывает общие данные: педали, скорость, круги. Список подходит оверлею, который строится вокруг особенности одной игры, например iRating в iRacing.
Что даёт запущенная игра
overlay.game — идентификатор запущенной игры или null, если игра не запущена. overlay.supports(путь) отвечает, заполняет ли эта игра указанное поле:
overlay.on('telemetry', ({ car }) => {
// Не все игры сообщают, включён ли ограничитель скорости на пит-лейне.
// Где не сообщают, лампу прячем.
limiter.hidden = !overlay.supports('car.pitLimiterActive');
limiter.classList.toggle('on', car.pitLimiterActive === true);
});{overlay.supports('car.pitLimiterActive') && (
<span className={car.pitLimiterActive ? 'limiter on' : 'limiter'}>PIT</span>
)}Проверяйте поле, а не название игры. Проверка overlay.game === 'iracing' перестанет быть верной, когда то же значение начнёт давать другая игра, а supports учтёт это сам. Какие игры заполняют каждое поле, видно в справочнике полей; там же есть фильтр по игре.
Поля одной игры
Поля, которые есть только в одной игре, лежат в ext.<игра>. В других играх там null, поэтому обращайтесь к ним через ?.:
const rating = driver.ext.iracing?.iRating ?? null;
const incidents = session.ext.iracing?.incidents.count ?? null;Если такое же значение позже появится и в другой игре, оно станет общим полем. Старый путь в ext ещё какое-то время будет работать, но получит пометку «устарело».
Поля, без которых оверлей не работает
Перечислите их в requires. Путь с опечаткой — ошибка при сборке, поэтому опечатка не дойдёт до игроков:
"requires": ["car.throttle", "car.brake"]Если каких-то данных нет
Проверьте каждую игру
?demo=<игра> запускает демо-данные конкретной игры: с её собственными полями и с теми значениями, которых в ней нет.
http://localhost:5173/?demo=iracing
http://localhost:5173/?demo=le-mans-ultimate
http://localhost:5173/?demo=assetto-corsa
http://localhost:5173/?demo=assetto-corsa-evo
http://localhost:5173/?demo=assetto-corsa-rally