Danil Iarosh e70120f0b0 Improve COM stability, settings security, and add VFX layer
- Оптимизировано закрытие COM-системы: вызов ReadLine вынесен из-под блокировки во избежание зависания главного потока Unity Editor при выходе из игры или выгрузке сцены.
- Реализован контур безопасности: доступ к меню настроек теперь заблокирован за вводом PIN-кода "1234" с использованием существующего экранного модального ввода ServiceTextInputModalWindow.
- Создана и интегрирована централизованная служба визуальных эффектов IVfxService / GameVfxService. Программно генерируются и воспроизводятся эффекты частиц для автопрыжка, сбора монет и гибели персонажа.
2026-06-23 14:56:40 +03:00

45 lines
1.6 KiB
C#

using UnityEngine;
using DanroJump.Audio;
using DanroJump.Vfx;
namespace DanroJump.Gameplay
{
/// <summary>
/// Collectible монеты, который увеличивает счетчик монет и очки сессии.
/// </summary>
public sealed class CoinCollectible : CollectibleBase
{
[SerializeField] [Min(1)] private int coinValue = 1;
[SerializeField] [Min(0)] private int scoreValue = 1;
private GameplaySession session;
private IGameAudioService audioService;
private IVfxService vfxService;
/// <summary>
/// Получает игровую сессию для записи награды.
/// </summary>
[Zenject.Inject]
public void Construct(
GameplaySession injectedSession,
[Zenject.InjectOptional] IGameAudioService injectedAudioService = null,
[Zenject.InjectOptional] IVfxService injectedVfxService = null)
{
session = injectedSession;
audioService = injectedAudioService;
vfxService = injectedVfxService;
}
/// <summary>
/// Начисляет монеты и очки после подбора.
/// </summary>
protected override void OnCollected(JumpPlayerController player)
{
audioService?.Play(GameAudioEvent.CoinCollected, transform.position);
vfxService?.SpawnCoinCollectedEffect(transform.position);
session?.AddCoins(coinValue);
session?.AddScore(scoreValue);
}
}
}