Один и два игрока
Для двух игроков VORIVOX поддерживает две понятные игровые модели без необходимости определять оружие по каждому попаданию: стрельба по очереди или разделение мишени на две половины.
1. Поочерёдная стрельба
На экране одна игровая сцена. Игра явно показывает «Игрок 1» или «Игрок 2». Каждое принятое попадание, серия выстрелов или законченный раунд переключает активного игрока — это определяют правила конкретной игры. Поскольку стреляет только активный игрок, target.hit не обязан содержать player_id.
let activePlayer = 0; // 0 = игрок 1, 1 = игрок 2
sdk.on('target.hit', hit => {
if (sdk.sessionState !== 'running') return;
addScore(activePlayer, scoreHit(hit));
activePlayer = activePlayer === 0 ? 1 : 0;
showTurn(activePlayer);
});
2. Мишень делится пополам
Физическое полотно остаётся одним, но игровая сцена делится вертикально: левая половина принадлежит игроку 1, правая — игроку 2. На каждой половине рисуется своя мишень или свой игровой объект. При нормализованных координатах граница проходит по nx = 0.5: nx < 0.5 → игрок 1, nx ≥ 0.5 → игрок 2.
function playerForHit(hit) {
return hit.nx < 0.5 ? 0 : 1;
}
sdk.on('target.hit', hit => {
if (sdk.sessionState !== 'running') return;
const player = playerForHit(hit);
addScore(player, scoreHalfTarget(player, hit));
});
target.hit недостаточно — понадобится отдельный канал идентификации.Что хранит игра
Два отдельных счёта, количество попаданий каждого игрока, активного игрока/раунд и понятную визуальную индикацию стороны. Базовый session.complete остаётся агрегированным контрактом, поэтому индивидуальные результаты нужно сохранять только тем способом, который отдельно предусмотрен платформой.
Что обязательно тестировать
Для очередности: пауза на смене хода, последний выстрел, повтор shot_id. Для разделённой мишени: попадания около центра, левый/правый край, зеркальная геометрия и читаемость обеих половин.