Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
- Интегрирована система кастомных визуальных эффектов (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 для предотвращения рассинхронизации буфера обмена платы.
49 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|