starOfWords/Assets/Scripts/3.0/mod9/Mod9Resume.cs
portakal ecb1c9edea Initial commit: Star of Words Unity project
Snapshot of the existing Unity 6 language-learning word game before any
refactoring. Adds Unity .gitignore and .gitattributes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 15:31:20 +03:00

126 lines
No EOL
3.4 KiB
C#

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);
}
}