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; // Частота волны (скорость пульсации) /// Если true — после таймера панель вернёт игрока в главное меню. [HideInInspector] public bool shouldReturnToMenu; private Coroutine countdownCoroutine; private RectTransform animatedTextRectTransform; private void OnEnable() { if (animatedText != null) animatedTextRectTransform = animatedText.GetComponent(); // Подстраховка — найти GameManager если не назначен в Inspector if (gameManager == null) gameManager = FindObjectOfType(); 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); } }