Danro-Jump/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateService.cs
Danil Iarosh d39d160d92 Implement physical prize dispensing, service stats, and QR screen timeout
- Добавлен асинхронный процесс аппаратной выдачи физических призов (хоппер и витрина) в GameplayHudController.
- Реализована блокировка выдачи по 10-секундному таймауту датчика хоппера с гарантированной отправкой команды отключения двигателя '300'.
- Реализован автоматический таймаут неактивности на экране QR-кода с последующим переходом в главное меню.
- Расширен сервис статистики PrizeSessionStateService новыми долгосрочными счетчиками (сыгранные игры, очки, монеты, сбои связи COM, физ. выдачи и ошибки).
- Обновлен построитель сводки статистики в меню настроек для отображения новых счетчиков и списка последних 5 сессий.
- Написаны EditMode тесты для проверки инкремента счетчиков и запуска выдачи призов.
2026-06-23 10:36:13 +03:00

39 lines
1.3 KiB
C#

using System;
using System.Collections.Generic;
namespace DanroJump.Prizes
{
/// <summary>
/// Хранит текущую призовую выдачу, историю решений и блокирует повторную выдачу одной сессии.
/// </summary>
public interface IPrizeSessionStateService
{
event Action Changed;
PrizeSessionRecord ActiveSession { get; }
IReadOnlyList<PrizeSessionRecord> History { get; }
int StartedCount { get; }
int CompletedCount { get; }
int FailedCount { get; }
int DuplicateBlockedCount { get; }
int TotalGamesPlayed { get; }
int TotalScore { get; }
int TotalCoins { get; }
int QrShows { get; }
int PhysicalDispenses { get; }
int PhysicalDispenseFailures { get; }
int ComErrors { get; }
bool TryBeginSession(PrizeFlowResult result, out PrizeSessionRecord record);
bool MarkActiveSessionShown();
bool CompleteActiveSession(string note = null);
bool FailActiveSession(string reason);
void RecordGameplaySession(int score, int coins);
void RecordQrShow();
void RecordComError();
void RecordPhysicalDispense(bool success);
string BuildSummary();
}
}