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>
168 lines
No EOL
4.4 KiB
C#
168 lines
No EOL
4.4 KiB
C#
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);
|
||
}
|
||
} |