144 lines
3.7 KiB
C#
144 lines
3.7 KiB
C#
|
|
using System.Collections;
|
||
|
|
using TMPro;
|
||
|
|
using UnityEngine;
|
||
|
|
using UnityEngine.SceneManagement;
|
||
|
|
using UnityEngine.UI;
|
||
|
|
|
||
|
|
public class Mod12Resume : 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;
|
||
|
|
|
||
|
|
private string modKey = "Mod12";
|
||
|
|
|
||
|
|
private int score;
|
||
|
|
private int maxScore;
|
||
|
|
private int correct;
|
||
|
|
private int wrong;
|
||
|
|
|
||
|
|
void Start()
|
||
|
|
{
|
||
|
|
LoadResults();
|
||
|
|
PrepareTexts();
|
||
|
|
|
||
|
|
if (retryButton)
|
||
|
|
retryButton.onClick.AddListener(() => { PlaySFX(); Retry(); });
|
||
|
|
|
||
|
|
if (exitButton)
|
||
|
|
exitButton.onClick.AddListener(() => { PlaySFX(); ExitToMenu(); });
|
||
|
|
|
||
|
|
StartCoroutine(PlayRevealSequence());
|
||
|
|
}
|
||
|
|
|
||
|
|
void LoadResults()
|
||
|
|
{
|
||
|
|
score = PlayerPrefs.GetInt(modKey + "_Score", 0);
|
||
|
|
maxScore = PlayerPrefs.GetInt(modKey + "_MaxScore", 0);
|
||
|
|
correct = PlayerPrefs.GetInt(modKey + "_Correct", 0);
|
||
|
|
wrong = PlayerPrefs.GetInt(modKey + "_Wrong", 0);
|
||
|
|
|
||
|
|
Debug.Log($"[MOD12 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;
|
||
|
|
|
||
|
|
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);
|
||
|
|
}
|
||
|
|
|
||
|
|
void Retry()
|
||
|
|
{
|
||
|
|
SceneManager.LoadScene("Mod12");
|
||
|
|
}
|
||
|
|
|
||
|
|
void ExitToMenu()
|
||
|
|
{
|
||
|
|
SceneManager.LoadScene("Anamen");
|
||
|
|
}
|
||
|
|
|
||
|
|
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);
|
||
|
|
}
|
||
|
|
}
|