using System.Collections; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class Mod4Resume : MonoBehaviour { [Header("UI TEXTS (ONLY NUMBERS)")] public TMP_Text scoreText; public TMP_Text maxScoreText; public TMP_Text correctText; public TMP_Text wrongText; [Header("BUTTONS")] public Button retryButton; public Button exitButton; [Header("AUDIO")] public AudioSource sfx; public AudioClip clickSound; [Header("━━━ ANIMATION SETTINGS ━━━━━━━━━━━━━━━━━")] public float countUpDuration = 0.8f; public float popInDelay = 0.08f; public float popInTime = 0.3f; // Bu modun kendi ana anahtarı private string modKey = "Mod4"; private int score; private int maxScore; private int correct; private int wrong; void Start() { LoadResults(); PrepareTexts(); if (retryButton != null) retryButton.onClick.AddListener(() => { PlaySFX(); Retry(); }); if (exitButton != null) exitButton.onClick.AddListener(() => { PlaySFX(); ExitToMenu(); }); StartCoroutine(PlayRevealSequence()); } // --------------------------------------------------------------- void LoadResults() { score = PlayerPrefs.GetInt(modKey + "_LastScore", 0); maxScore = PlayerPrefs.GetInt(modKey + "_MaxScore", 0); correct = PlayerPrefs.GetInt(modKey + "_Correct", 0); wrong = PlayerPrefs.GetInt(modKey + "_Wrong", 0); Debug.Log("MOD4 RESULT → " + $"Score:{score} | Max:{maxScore} | C:{correct} | W:{wrong}"); } // --------------------------------------------------------------- void PrepareTexts() { SetTextZero(scoreText); SetTextZero(maxScoreText); SetTextZero(correctText); SetTextZero(wrongText); } void SetTextZero(TMP_Text txt) { if (txt == null) return; txt.text = "0"; txt.transform.localScale = Vector3.zero; } // --------------------------------------------------------------- IEnumerator PlayRevealSequence() { yield return StartCoroutine(RevealStat(scoreText, score)); yield return new WaitForSeconds(popInDelay); yield return StartCoroutine(RevealStat(maxScoreText, maxScore)); yield return new WaitForSeconds(popInDelay); yield return StartCoroutine(RevealStat(correctText, correct)); yield return new WaitForSeconds(popInDelay); yield return StartCoroutine(RevealStat(wrongText, wrong)); } IEnumerator RevealStat(TMP_Text txt, int targetValue) { if (txt == null) yield break; // pop-in scale Vector3 normal = Vector3.one; float t = 0f; while (t < 1f) { t += Time.deltaTime / Mathf.Max(0.01f, popInTime); txt.transform.localScale = Vector3.Lerp(Vector3.zero, normal, EaseOutBack(t)); if (targetValue == 0) txt.text = "0"; yield return null; } txt.transform.localScale = normal; // count-up if (targetValue > 0) { float ct = 0f; while (ct < 1f) { ct += Time.deltaTime / Mathf.Max(0.01f, countUpDuration); int shown = Mathf.RoundToInt(Mathf.Lerp(0, targetValue, EaseOutQuad(ct))); txt.text = shown.ToString(); yield return null; } } txt.text = targetValue.ToString(); } // --------------------------------------------------------------- void PlaySFX() { if (sfx && clickSound) sfx.PlayOneShot(clickSound); } // --------------------------------------------------------------- void Retry() { // 🔥 MOD 4 OYUN SAHNESİNE GERİ DÖNÜŞ SceneManager.LoadScene("Mod4"); } // --------------------------------------------------------------- void ExitToMenu() { SceneManager.LoadScene("Anamen"); } // --------------------------------------------------------------- float EaseOutBack(float t) { t = Mathf.Clamp01(t); float c1 = 1.70158f; float c3 = c1 + 1f; return 1f + c3 * Mathf.Pow(t - 1f, 3f) + c1 * Mathf.Pow(t - 1f, 2f); } float EaseOutQuad(float t) { t = Mathf.Clamp01(t); return 1f - (1f - t) * (1f - t); } }