SummerGame/Assets/KirillAss/Scripts/Bonuses/BonusManager.cs

83 lines
1.9 KiB
C#

using System.Collections;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class BonusManager : MonoBehaviour
{
public static BonusManager Instance { get; private set; }
[Header("UI Элементы")]
public Image bonusIcon;
public TextMeshProUGUI bonusTimerText;
private BonusEffect _activeBonus;
private float _timer;
private GameObject _player;
private int _lastDisplayedTime = -1;
void Awake()
{
if (Instance == null) Instance = this;
else Destroy(gameObject);
}
void Start()
{
_player = GameObject.FindGameObjectWithTag("Player");
bonusIcon.gameObject.SetActive(false);
bonusTimerText.gameObject.SetActive(false);
}
void Update()
{
if (_activeBonus != null)
{
_timer -= Time.deltaTime;
if (_timer <= 0)
{
DeactivateBonus();
}
else
{
int secondsLeft = Mathf.CeilToInt(_timer);
if (secondsLeft != _lastDisplayedTime)
{
_lastDisplayedTime = secondsLeft;
bonusTimerText.text = secondsLeft.ToString();
}
}
}
}
public void ActivateBonus(BonusEffect bonus)
{
if (_activeBonus != null)
{
DeactivateBonus();
}
_activeBonus = bonus;
_timer = _activeBonus.duration;
_lastDisplayedTime = -1;
_activeBonus.Activate(_player);
bonusIcon.gameObject.SetActive(true);
bonusTimerText.gameObject.SetActive(true);
}
private void DeactivateBonus()
{
if (_activeBonus != null && _player != null)
{
_activeBonus.Deactivate(_player);
}
_activeBonus = null;
_timer = 0;
bonusIcon.gameObject.SetActive(false);
bonusTimerText.gameObject.SetActive(false);
}
}