Danro-Jump/Assets/Scripts/Runtime/Audio/GameAudioEmitter.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

63 lines
1.6 KiB
C#

using System;
using UnityEngine;
using Zenject;
namespace DanroJump.Audio
{
/// <summary>
/// Универсальный мост от prefab/Animation Event к централизованной аудиосистеме.
/// </summary>
[DisallowMultipleComponent]
[AddComponentMenu("Audio/Game Audio Emitter")]
public sealed class GameAudioEmitter : MonoBehaviour
{
[SerializeField] private bool playAtTransform = true;
private IGameAudioService audioService;
[Inject]
public void Construct([InjectOptional] IGameAudioService injectedAudioService = null)
{
audioService = injectedAudioService;
}
public void Play(GameAudioEvent eventId)
{
if (playAtTransform)
{
audioService?.Play(eventId, transform.position);
return;
}
audioService?.Play(eventId);
}
public void PlayGlobal(GameAudioEvent eventId)
{
audioService?.Play(eventId);
}
public void PlayByName(string eventName)
{
if (string.IsNullOrWhiteSpace(eventName) ||
!Enum.TryParse(eventName, true, out GameAudioEvent eventId))
{
return;
}
Play(eventId);
}
public void PlayGlobalByName(string eventName)
{
if (string.IsNullOrWhiteSpace(eventName) ||
!Enum.TryParse(eventName, true, out GameAudioEvent eventId))
{
return;
}
PlayGlobal(eventId);
}
}
}