Danro-Jump/Assets/Scripts/Runtime/Vfx/GameVfxService.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

55 lines
1.6 KiB
C#

using UnityEngine;
namespace DanroJump.Vfx
{
/// <summary>
/// Служба визуальных эффектов, загружающая и инстанцирующая префабы систем частиц из Resources/Vfx/.
/// </summary>
public sealed class GameVfxService : IVfxService
{
public void SpawnJumpEffect(Vector3 position)
{
SpawnVfx("VFX_Jump", position);
}
public void SpawnCoinCollectedEffect(Vector3 position)
{
SpawnVfx("VFX_CoinCollected", position);
}
public void SpawnPlayerDeathEffect(Vector3 position)
{
SpawnVfx("VFX_PlayerDeath", position);
}
public void SpawnPrizeEffect(Vector3 position)
{
SpawnVfx("VFX_PrizeWin", position);
}
public void SpawnComErrorEffect(Vector3 position)
{
SpawnVfx("VFX_ComError", position);
}
private void SpawnVfx(string prefabName, Vector3 position)
{
var prefab = Resources.Load<ParticleSystem>($"Vfx/{prefabName}");
if (prefab == null)
{
Debug.LogWarning($"[GameVfxService] Prefab Resources/Vfx/{prefabName} not found. Attempting to generate default assets.");
return;
}
var ps = Object.Instantiate(prefab, position, Quaternion.identity);
ps.Play();
if (Application.isPlaying)
{
var main = ps.main;
Object.Destroy(ps.gameObject, main.duration + main.startLifetime.constantMax);
}
}
}
}