sea-battle/Assets/Scripts/UI/Panels/PrizeReminderPanel.cs

89 lines
3.2 KiB
C#

using System.Collections;
using UnityEngine;
using TMPro;
public class PrizeReminderPanel : MonoBehaviour
{
[SerializeField] private TextMeshProUGUI countdownText;
[SerializeField] private float countdownDuration = 10f;
[SerializeField] private GameManager gameManager;
[Header("Sine Wave Animation")]
[SerializeField] private TextMeshProUGUI animatedText; // Текст который нужно пульсировать (не таймер!)
[SerializeField] private float minScale = 0.8f; // Минимальный размер
[SerializeField] private float maxScale = 1.2f; // Максимальный размер
[SerializeField] private float waveFrequency = 2f; // Частота волны (скорость пульсации)
/// <summary>Если true — после таймера панель вернёт игрока в главное меню.</summary>
[HideInInspector] public bool shouldReturnToMenu;
private Coroutine countdownCoroutine;
private RectTransform animatedTextRectTransform;
private void OnEnable()
{
if (animatedText != null)
animatedTextRectTransform = animatedText.GetComponent<RectTransform>();
// Подстраховка — найти GameManager если не назначен в Inspector
if (gameManager == null)
gameManager = FindObjectOfType<GameManager>();
if (countdownCoroutine != null)
StopCoroutine(countdownCoroutine);
countdownCoroutine = StartCoroutine(CountdownRoutine());
}
private void OnDisable()
{
if (countdownCoroutine != null)
{
StopCoroutine(countdownCoroutine);
countdownCoroutine = null;
}
// Возвращаем текст к нормальному размеру
if (animatedTextRectTransform != null)
animatedTextRectTransform.localScale = Vector3.one;
}
private void Update()
{
if (animatedTextRectTransform == null) return;
// Вычисляем значение синусоиды от -1 до 1
float sineValue = Mathf.Sin(Time.time * waveFrequency);
// Преобразуем в диапазон от 0 до 1
float normalizedValue = (sineValue + 1f) / 2f;
// Интерполируем между минимальным и максимальным масштабом
float scale = Mathf.Lerp(minScale, maxScale, normalizedValue);
animatedTextRectTransform.localScale = Vector3.one * scale;
}
private IEnumerator CountdownRoutine()
{
float remaining = countdownDuration;
while (remaining > 0f)
{
if (countdownText != null)
countdownText.text = Mathf.CeilToInt(remaining).ToString();
yield return new WaitForSeconds(1f);
remaining -= 1f;
}
if (countdownText != null)
countdownText.text = "0";
// Выходим в меню — MenuGame сам скрывает все оверлеи включая эту панель
if (gameManager != null)
gameManager.MenuGame();
else
gameObject.SetActive(false);
}
}