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

127 lines
3.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using Zenject;
using DanroJump.SceneFlow;
namespace DanroJump.Settings
{
/// <summary>
/// MonoBehaviour-фасад для вызова действий приложения из UI/Unity Events.
/// </summary>
public sealed class AppUIFacade : MonoBehaviour
{
private IServiceSettingsService settings;
private ISceneFlowService sceneFlow;
/// <summary>
/// Получает сервис настроек через Extenject.
/// </summary>
[Inject]
public void Construct(
IServiceSettingsService injectedSettings,
[InjectOptional] ISceneFlowService injectedSceneFlow = null)
{
settings = injectedSettings;
sceneFlow = injectedSceneFlow;
}
/// <summary>
/// Вручную назначает сервис настроек, если объект используется вне DI.
/// </summary>
public void Configure(IServiceSettingsService service, ISceneFlowService injectedSceneFlow = null)
{
settings = service;
sceneFlow = injectedSceneFlow ?? sceneFlow;
}
/// <summary>
/// Сохраняет настройки.
/// </summary>
public void Save()
{
settings?.Save();
}
/// <summary>
/// Перечитывает настройки, разрешенные для изменения через внешний JSON.
/// </summary>
public void ReloadExternalChanges()
{
settings?.ReloadExternalChanges();
}
/// <summary>
/// Повторно применяет текущие значения настроек.
/// </summary>
public void ApplyAll()
{
settings?.ApplyAll();
}
/// <summary>
/// Сбрасывает все настройки к значениям по умолчанию.
/// </summary>
public void ResetAllToDefaults()
{
settings?.ResetAllToDefaults();
}
/// <summary>
/// Сбрасывает одну группу настроек к значениям по умолчанию.
/// </summary>
public void ResetGroupToDefaults(string groupName)
{
settings?.ResetGroupToDefaults(groupName);
}
/// <summary>
/// Открывает папку persistentDataPath с внешним JSON настроек.
/// </summary>
public void OpenPersistentDataFolder()
{
Application.OpenURL($"file://{Application.persistentDataPath}");
}
/// <summary>
/// Загружает сцену по имени.
/// </summary>
public void LoadScene(string sceneName)
{
var resolvedSceneFlow = GetSceneFlow();
if (!string.IsNullOrWhiteSpace(sceneName) && resolvedSceneFlow != null)
{
resolvedSceneFlow.LoadScene(sceneName);
}
}
/// <summary>
/// Возвращает приложение в главное меню.
/// </summary>
public void LoadMainMenu()
{
GetSceneFlow()?.OpenMainMenu();
}
private ISceneFlowService GetSceneFlow()
{
if (sceneFlow == null)
{
Debug.LogWarning($"{nameof(AppUIFacade)} requires {nameof(ISceneFlowService)} from DI.", this);
}
return sceneFlow;
}
/// <summary>
/// Завершает приложение или останавливает Play Mode в редакторе.
/// </summary>
public void QuitApplication()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
}
}