Danro/Assets/Scripts/FX/MvpVFXSpawnSettings.cs
Danil Iarosh e8000ffdca
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
feat(vfx, ui, com): add custom vfx, polish ui and update backlight protocol
- Интегрирована система кастомных визуальных эффектов (VFX):
  - Добавлена новая утилита MvpVFXUtility и настройки MvpVFXSpawnSettings для спавна эффектов.
  - Реализован пул эффектов VFXPool с поддержкой отслеживания версий спавна, сброса оверрайдов и анимации масштаба по времени.
  - Добавлены эффекты прыжка и приземления в PlayerAnimationEvents.
  - Интегрирован эффект DeathVignetteController для плавного затемнения экрана при смерти игрока.
  - Добавлены частицы stompImpactVFX при уничтожении врагов прыжком сверху (EnemyController).
  - Реализован эффект конфетти finishVFX при успешном завершении уровня (LevelFinish).
  - Интегрированы эффекты искр при сборе монеток, кристаллов и других собираемых предметов (Collectible, EnvironmentalCollectibleBase).
- Улучшен и визуально доработан пользовательский интерфейс (UI):
  - Добавлен скрипт QRCodeTierHighlight для цветовой подсветки QR-кодов в зависимости от тира приза.
  - Реализована пульсация блока приза в баннере победы (WinBannerController).
  - Обновлено обозначение валюты в BalanceDisplay с "₽" на "руб.".
  - Добавлены новые префабы, сцены, ассеты тайлсетов и шейдеров для настройки визуального стиля.
- Обновлён протокол и инициализация подсветки COM-платы:
  - Изменен префикс команд подсветки с 85/86 на 8550, а диапазон эффектов обновлен с 40...52 на 10...22 (LightController, LightMode, LightCycleDurations).
  - Исправлена хардкод-команда сброса подсветки при инициализации в ComDeviceClient с устаревшей 8600 на новую 8550 для предотвращения рассинхронизации буфера обмена платы.
2026-07-07 16:52:05 +03:00

79 lines
3.0 KiB
C#

using System;
using UnityEngine;
namespace RR.Game2D.FX
{
[Serializable]
public sealed class MvpVFXSpawnSettings
{
[Tooltip("Сколько копий burst-эффекта создать вокруг точки спавна. Используется как простой множитель плотности частиц.")]
[Min(1)]
public int instanceCount = 1;
[Tooltip("Пробовать переопределить Count внутри VFX Graph burst spawn.")]
public bool overrideParticleCount;
[Min(0f)]
public float particleCount = 50f;
[Tooltip("Горизонтальный радиус случайного разброса копий эффекта.")]
[Min(0f)]
public float spreadRadiusX;
[Tooltip("Вертикальный радиус случайного разброса копий эффекта.")]
[Min(0f)]
public float spreadRadiusY;
[Tooltip("Масштаб объекта VFX. Для локальных VFX Graph shape-нод также влияет на область распространения частиц.")]
[Min(0.01f)]
public float scale = 1f;
[Tooltip("Масштабировать весь spawned VFX по кривой в течение времени жизни эффекта.")]
public bool overrideSizeOverLife;
public AnimationCurve sizeOverLife = CreateDefaultSizeOverLife();
[Tooltip("Пробовать переопределить цвет эффекта через VFX/renderer параметры.")]
public bool overrideColor;
[ColorUsage(true, true)]
public Color color = Color.white;
[Tooltip("Пробовать переопределить градиент блока Multiply Color Over Life.")]
public bool overrideColorOverLife;
public Gradient colorOverLife = CreateDefaultColorOverLife();
[Tooltip("Пробовать переопределить текстуру частиц через VFX/renderer параметры.")]
public bool overrideTexture;
public Texture2D texture;
private static Gradient CreateDefaultColorOverLife()
{
Gradient gradient = new Gradient();
gradient.SetKeys(
new[]
{
new GradientColorKey(new Color(1f, 0.85f, 0.35f), 0f),
new GradientColorKey(Color.white, 1f)
},
new[]
{
new GradientAlphaKey(1f, 0f),
new GradientAlphaKey(1f, 0.8f),
new GradientAlphaKey(0f, 1f)
});
return gradient;
}
private static AnimationCurve CreateDefaultSizeOverLife()
{
return new AnimationCurve(
new Keyframe(0f, 0f, 6.6156807f, 6.6156807f),
new Keyframe(0.1f, 1.5f, 0.06686528f, 0.06686528f),
new Keyframe(1f, 0f, -1.6666667f, -1.6666667f));
}
}
}