starOfWords/Assets/Scripts/2.0/ResultScene_TTE.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

221 lines
9.5 KiB
C#
Raw 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 UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.SceneManagement;
public class ResultScene_TTE : MonoBehaviour
{
[Header("UI Texts")]
public TMP_Text levelNameText;
public TMP_Text scoreText;
public TMP_Text highScoreText;
public TMP_Text correctText;
public TMP_Text wrongText;
public TMP_Text resultStatusText;
[Header("Buttons")]
public Button retryButton;
public Button levelMapButton;
public Button mainMenuButton;
[Header("Audio")]
public AudioSource audioSource;
public AudioClip clickSound;
[Header("Scene Names")]
[SerializeField] private string levelMapScene = "StageLevelMap";
[SerializeField] private string mainMenuScene = "Anamen";
[SerializeField] private string gameSceneName = "LLGameScene_Level";
private int score;
private int correct;
private int wrong;
private int selectedLevel;
private int langIndex; // CEVAP DİLİ İNDEKSİ
// ===========================
// 20 LEVEL ADI (6 DİL)
// ===========================
private readonly string[,] levelNames = new string[,]
{
{ "Temel Selamlaşma ve İnsanlar","Basic Greetings & People","Saludos Básicos y Personas","Grundbegrüßungen & Menschen","Salutations de Base & Personnes","Saudações Básicas e Pessoas" },
{ "Günlük Ev Nesneleri","Daily Household Items","Objetos del Hogar Diarios","Tägliche Haushaltsgegenstände","Objets Quotidiens de la Maison","Objetos Domésticos Diários" },
{ "Yiyecekler ve İçecekler","Food & Drinks","Comida y Bebida","Essen & Getränke","Nourriture & Boissons","Comidas e Bebidas" },
{ "Renkler, Şekiller ve Boyutlar","Colors, Shapes & Sizes","Colores, Formas y Tamaños","Farben, Formen & Größen","Couleurs, Formes & Tailles","Cores, Formas e Tamanhos" },
{ "Zaman, Günler ve Mevsimler","Time, Days & Seasons","Tiempo, Días y Estaciones","Zeit, Tage & Jahreszeiten","Temps, Jours & Saisons","Tempo, Dias e Estações" },
{ "Ev İçi Alanlar ve Temizlik","Home Areas & Cleaning","Áreas del Hogar y Limpieza","Hausbereiche & Reinigung","Espaces de Maison & Nettoyage","Áreas da Casa e Limpeza" },
{ "Okul, Eğitim ve Ders Araçları","School, Education & Supplies","Escuela, Educación y Útiles","Schule, Bildung & Materialien","École, Éducation & Fournitures","Escola, Educação e Materiais" },
{ "Vücut Parçaları ve Sağlık","Body Parts & Health","Partes del Cuerpo y Salud","Körperteile & Gesundheit","Parties du Corps & Santé","Partes do Corpo e Saúde" },
{ "Doğa, Hava ve Çevre Unsurları","Nature, Weather & Environment","Naturaleza, Clima y Medio Ambiente","Natur, Wetter & Umwelt","Nature, Météo & Environnement","Natureza, Clima e Meio Ambiente" },
{ "Evcil ve Vahşi Hayvanlar","Pets & Wild Animals","Mascotas y Animales Salvajes","Haustiere & Wildtiere","Animaux Domestiques & Sauvages","Animais Domésticos e Selvagens" },
{ "Ulaşım Araçları ve Trafik","Transportation & Traffic","Transporte y Tráfico","Transport & Verkehr","Transport & Circulation","Transporte e Trânsito" },
{ "Alışveriş ve Mağazalar","Shopping & Stores","Compras y Tiendas","Einkaufen & Geschäfte","Shopping & Magasins","Compras e Lojas" },
{ "Spor Dalları ve Ekipmanları","Sports & Equipment","Deportes y Equipamiento","Sportarten & Ausrüstung","Sports & Équipement","Esportes e Equipamentos" },
{ "Meslekler ve İş Alanları","Jobs & Work Fields","Profesiones y Áreas Laborales","Berufe & Arbeitsfelder","Métiers & Domaines de Travail","Profissões e Áreas de Trabalho" },
{ "Şehir, Yerler ve Binalar","City, Places & Buildings","Ciudad, Lugares y Edificios","Stadt, Orte & Gebäude","Ville, Lieux & Bâtiments","Cidade, Lugares e Edifícios" },
{ "Duygular, Durumlar ve Karakter","Emotions, States & Character","Emociones, Estados y Carácter","Gefühle, Zustände & Charakter","Émotions, États & Caractère","Emoções, Estados e Caráter" },
{ "Seyahat, Tatil ve Turizm","Travel, Vacation & Tourism","Viajes, Vacaciones y Turismo","Reisen, Urlaub & Tourismus","Voyage, Vacances & Tourisme","Viagem, Férias e Turismo" },
{ "Teknoloji, İnternet ve Cihazlar","Technology, Internet & Devices","Tecnología, Internet y Dispositivos","Technologie, Internet & Geräte","Technologie, Internet & Appareils","Tecnologia, Internet e Dispositivos" },
{ "Çevre Koruma ve Geri Dönüşüm","Environmental Protection & Recycling","Protección Ambiental y Reciclaje","Umweltschutz & Recycling","Protection de l'Environnement & Recyclage","Proteção Ambiental e Reciclagem" },
{ "İleri Günlük İfadeler ve İş Hayatı","Advanced Daily Phrases & Work Life","Frases Avanzadas y Vida Laboral","Fortgeschrittene Alltagssätze & Arbeitsleben","Phrases Avancées & Vie Professionnelle","Frases Avançadas e Vida Profissional" }
};
private readonly string[] labelScore = { " ", " ", " ", " ", " ", " " };
private readonly string[] labelHighScore = { " ", " ", " ", " ", " ", " " };
private readonly string[] labelCorrect = { " ", " ", " ", " ", " ", " " };
private readonly string[] labelWrong = { " ", " ", " ", " ", " ", " " };
private readonly string[] labelPassed = {
"TEBRİKLER! 🎉 LEVEL GEÇİLDİ",
"CONGRATULATIONS! 🎉 LEVEL CLEARED",
"¡FELICIDADES! 🎉 NIVEL COMPLETADO",
"GLÜCKWUNSCH! 🎉 LEVEL GESCHAFFT",
"FÉLICITATIONS ! 🎉 NIVEAU RÉUSSI",
"PARABÉNS! 🎉 NÍVEL CONCLUÍDO"
};
private readonly string[] labelFailed = {
"LEVEL BAŞARISIZ ❌",
"LEVEL FAILED ❌",
"NIVEL FALLIDO ❌",
"LEVEL NICHT BESTANDEN ❌",
"NIVEAU ÉCHOUÉ ❌",
"NÍVEL REPROVADO ❌"
};
// ============================================================
void Start()
{
// 1) Dil indexini al
string ansLang = PlayerPrefs.GetString("AnswerLangCode", "tr").ToLower();
langIndex = GetLangIndex(ansLang);
// 2) Sonuçları yükle + high score kaydet
LoadResults();
SaveHighScore();
// 3) ÖNCE butonları bağla (Start hata alsa bile en azından buraya kadar gelsin)
if (retryButton != null)
{
retryButton.onClick.RemoveAllListeners();
retryButton.onClick.AddListener(OnRetry);
}
if (levelMapButton != null)
{
levelMapButton.onClick.RemoveAllListeners();
levelMapButton.onClick.AddListener(OnLevelMap);
}
if (mainMenuButton != null)
{
mainMenuButton.onClick.RemoveAllListeners();
mainMenuButton.onClick.AddListener(OnMainMenu);
}
// 4) UIı güncelle (null-safe)
UpdateUI();
}
// ============================================================
int GetLangIndex(string code)
{
switch (code)
{
case "tr": return 0;
case "en": return 1;
case "es": return 2;
case "de": return 3;
case "fr": return 4;
case "pt": return 5;
}
return 1;
}
// ============================================================
void LoadResults()
{
score = PlayerPrefs.GetInt("Mod2Score", 0);
correct = PlayerPrefs.GetInt("Mod2Correct", 0);
wrong = PlayerPrefs.GetInt("Mod2Wrong", 0);
selectedLevel = Mathf.Clamp(PlayerPrefs.GetInt("SelectedLevel", 1), 1, 20);
}
// ============================================================
void SaveHighScore()
{
string key = "HighScore_Level_" + selectedLevel;
int old = PlayerPrefs.GetInt(key, 0);
if (score > old)
{
PlayerPrefs.SetInt(key, score);
PlayerPrefs.Save();
}
}
// ============================================================
void UpdateUI()
{
int safeLang = Mathf.Clamp(langIndex, 0, 5);
int idx = Mathf.Clamp(selectedLevel - 1, 0, 19);
if (levelNameText != null)
levelNameText.text = $"LEVEL {selectedLevel}\n{levelNames[idx, safeLang]}";
if (scoreText != null)
scoreText.text = $"{labelScore[safeLang]} {score}";
if (highScoreText != null)
highScoreText.text = $"{labelHighScore[safeLang]} {PlayerPrefs.GetInt("HighScore_Level_" + selectedLevel, 0)}";
if (correctText != null)
correctText.text = $"{labelCorrect[safeLang]} {correct}";
if (wrongText != null)
wrongText.text = $"{labelWrong[safeLang]} {wrong}";
if (resultStatusText != null)
{
if (score >= 2000)
{
resultStatusText.text = labelPassed[safeLang];
resultStatusText.color = Color.green;
}
else
{
resultStatusText.text = labelFailed[safeLang];
resultStatusText.color = Color.red;
}
}
}
// ============================================================
void OnRetry()
{
PlayClick();
if (!string.IsNullOrEmpty(gameSceneName))
SceneManager.LoadScene(gameSceneName);
}
void OnLevelMap()
{
PlayClick();
if (!string.IsNullOrEmpty(levelMapScene))
SceneManager.LoadScene(levelMapScene);
}
void OnMainMenu()
{
PlayClick();
if (!string.IsNullOrEmpty(mainMenuScene))
SceneManager.LoadScene(mainMenuScene);
}
void PlayClick()
{
if (audioSource && clickSound)
audioSource.PlayOneShot(clickSound);
}
}