Danro/Assets/Scripts/Entities/Props/Collectible.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

49 lines
1.7 KiB
C#

using UnityEngine;
using UnityEngine.VFX;
using RR.Common.Interfaces;
using RR.Common.Audio;
using RR.Game2D.Core.Managers;
using RR.Game2D.FX;
namespace RR.Common.Entities.Props
{
[RequireComponent(typeof(Collider2D))]
public class Collectible : MonoBehaviour, IPickable
{
[SerializeField] private SoundEffect pickupSFX;
[SerializeField] private VisualEffect pickupVFX;
[SerializeField] private VisualEffectAsset pickupVFXAsset;
[SerializeField] private string pickupVFXResourcePath = "VFX/MVP_PickupSparkle_VFX";
[SerializeField] private float pickupVFXLifetime = 1f;
[SerializeField] private MvpVFXSpawnSettings pickupVFXSettings = new MvpVFXSpawnSettings
{
spreadRadiusX = 0.08f,
spreadRadiusY = 0.08f
};
private void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player")) TryPickup(other.gameObject);
}
public virtual bool TryPickup(GameObject newOwner, Transform optionalAttachPoint = null)
{
if (pickupSFX.sound != null)
GameManager.Instance.Audio.PlaySfxAt(pickupSFX.sound, transform.position,
pickupSFX.volume, pickupSFX.pitch);
MvpVFXUtility.Spawn(pickupVFXAsset, pickupVFXResourcePath, transform.position, pickupVFXLifetime, pickupVFXSettings);
if (pickupVFX != null && pickupVFXAsset == null && string.IsNullOrWhiteSpace(pickupVFXResourcePath))
{
pickupVFX.transform.position = transform.position;
pickupVFX.Play();
pickupVFX.Stop();
}
return true;
}
}
}