using System.Collections; using UnityEngine; using UnityEngine.UI; using TMPro; using UnityEngine.SceneManagement; public class Mod9Resume : MonoBehaviour { [Header("UI TEXTS")] 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; private string modKey = "Mod9_Synonym"; int score, maxScore, correct, wrong; void Start() { LoadResults(); PrepareTexts(); retryButton.onClick.AddListener(() => { PlaySFX(); SceneManager.LoadScene("Mod9"); }); exitButton.onClick.AddListener(() => { PlaySFX(); SceneManager.LoadScene("Anamen"); }); 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); } 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; float t = 0f; while (t < 1f) { t += Time.deltaTime / Mathf.Max(0.01f, popInTime); txt.transform.localScale = Vector3.Lerp(Vector3.zero, Vector3.one, EaseOutBack(t)); if (targetValue == 0) txt.text = "0"; yield return null; } txt.transform.localScale = Vector3.one; if (targetValue > 0) { float ct = 0f; while (ct < 1f) { ct += Time.deltaTime / Mathf.Max(0.01f, countUpDuration); txt.text = Mathf.RoundToInt(Mathf.Lerp(0, targetValue, EaseOutQuad(ct))).ToString(); yield return null; } } txt.text = targetValue.ToString(); } void PlaySFX() { if (sfx && clickSound) sfx.PlayOneShot(clickSound); } float EaseOutBack(float t) { t = Mathf.Clamp01(t); float c1 = 1.70158f, 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); } }