Danro-Jump/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateService.cs
Danil Iarosh 839a68aef1 Improve VFX, UI overlays, session statistics, COM reliability, audio mixer, and expand architecture guides
Подробный список изменений:
- Перенесены эффекты частиц из C#-кода в готовые префабы-ассеты (Vfx Prefabs) в папке Assets/Resources/Vfx/ с автоматической генерацией материалов в Editor.
- Исправлены ошибки duration на играющих системах частиц и розовые текстуры в GameVfxService.cs.
- Исправлена навигация и фокус кнопок на оверлеях ContinueGameOverlay и PrizeResultOverlay с автоматическим подсвечиванием кнопок лимонно-зеленым цветом при фокусе и проигрыванием звука.
- Добавлена проверка настроек в GameplayHudController.cs для скрытия ContinueGameOverlay, если продолжение игры отключено.
- Расширен сбор статистики: создана структура GameplaySessionRecord, добавлена история до 50 раундов в PrizeSessionStateService и JsonPrizeSessionStateRepository, выведен расчет средних показателей и список 5 последних раундов в сервисной статистике.
- Повышена надежность COM-транспорта: добавлен sleep (80мс) в Dispose для graceful shutdown потоков, реализован цикл переподключения до 10 попыток при обрыве связи.
- Интегрированы настройки громкости с микшером: изменен шаг изменения громкости на 5% (0.05) для удобства, добавлен статус-чек и логи в ApplyServiceVolumes, расширены юнит-тесты на GetFloat параметры.
- Созданы новые архитектурные гайды по аппаратному COM-транспорту и призовой экономике автомата в папке GUIDES/architecture/.
- Оптимизирован и обновлен RAG-индекс проекта.
2026-07-03 15:04:08 +03:00

47 lines
1.5 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; }
IReadOnlyList<GameplaySessionRecord> GameplayHistory { 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(
string sessionId,
int score,
int coins,
float maxHeight,
int deathCount,
PrizeRewardKind rewardKind
);
void RecordQrShow();
void RecordComError();
void RecordPhysicalDispense(bool success);
string BuildSummary();
}
}