starOfWords/Assets/Scripts/3.0/Mod6/Mod6Resume.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

177 lines
No EOL
4.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class Mod6Resume : MonoBehaviour
{
[Header("UI TEXTS")]
public TMP_Text scoreText; // Toplam skor
public TMP_Text maxScoreText; // En yüksek skor
public TMP_Text correctText; // Doğru sayısı
public TMP_Text wrongText; // Yanlış sayısı
[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;
// Mod6 PlayerPrefs Key
private string modKey = "Mod6";
private int score;
private int maxScore;
private int correct;
private int wrong;
// ============================================================
void Start()
{
LoadResults();
PrepareTexts();
// Retry
if (retryButton != null)
retryButton.onClick.AddListener(() =>
{
PlaySFX();
Retry();
});
// Exit
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($"[MOD6 RESULT] Score={score} | Max={maxScore} | Correct={correct} | Wrong={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()
{
SceneManager.LoadScene("Mod6");
}
// ============================================================
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);
}
}