89 lines
3.2 KiB
C#
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);
|
|
}
|
|
}
|