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>
140 lines
3.6 KiB
C#
140 lines
3.6 KiB
C#
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
using UnityEngine.SceneManagement;
|
||
|
||
public class MainMenuController : MonoBehaviour
|
||
{
|
||
[Header("Buttons")]
|
||
[SerializeField] private Button btnPlay;
|
||
[SerializeField] private Button btnContinue;
|
||
[SerializeField] private Button btnWords;
|
||
[SerializeField] private Button btnLeaderboard;
|
||
[SerializeField] private Button btnExit;
|
||
[SerializeField] private Button btnSettings;
|
||
|
||
[Header("Audio")]
|
||
[SerializeField] private AudioSource musicSource;
|
||
[SerializeField] private AudioSource sfxSource;
|
||
[SerializeField] private AudioClip clickSound;
|
||
[SerializeField] private AudioClip menuMusic;
|
||
|
||
private bool hasSave = false;
|
||
|
||
private void Awake()
|
||
{
|
||
ValidateComponents();
|
||
}
|
||
|
||
private void Start()
|
||
{
|
||
DetectSaveFile();
|
||
ConfigureContinueButton();
|
||
PlayMenuMusic();
|
||
BindButtonEvents();
|
||
}
|
||
|
||
// ===============================
|
||
// BUTTON EVENTS
|
||
// ===============================
|
||
private void BindButtonEvents()
|
||
{
|
||
btnPlay.onClick.AddListener(() => { PlayClick(); StartNewGame(); });
|
||
btnContinue.onClick.AddListener(() => { PlayClick(); ContinueGame(); });
|
||
btnWords.onClick.AddListener(() => { PlayClick(); GoWords(); });
|
||
btnLeaderboard.onClick.AddListener(() => { PlayClick(); GoLeaderboard(); });
|
||
btnExit.onClick.AddListener(() => { PlayClick(); ExitGame(); });
|
||
btnSettings.onClick.AddListener(() => { PlayClick(); OpenSettings(); });
|
||
}
|
||
|
||
private void StartNewGame()
|
||
{
|
||
SceneManager.LoadScene("ModeSelect");
|
||
}
|
||
|
||
private void ContinueGame()
|
||
{
|
||
int lastLevel = PlayerPrefs.GetInt("LastPlayedLevel", 1);
|
||
SceneManager.LoadScene("GameScene_Level" + lastLevel);
|
||
}
|
||
|
||
private void GoWords()
|
||
{
|
||
SceneManager.LoadScene("WordsScene");
|
||
}
|
||
|
||
private void GoLeaderboard()
|
||
{
|
||
SceneManager.LoadScene("LeaderboardScene");
|
||
}
|
||
|
||
private void OpenSettings()
|
||
{
|
||
SceneManager.LoadScene("SettingsScene");
|
||
}
|
||
|
||
private void ExitGame()
|
||
{
|
||
PlayClick(); // click sesi varsa
|
||
|
||
#if UNITY_EDITOR
|
||
UnityEditor.EditorApplication.isPlaying = false;
|
||
#elif UNITY_ANDROID
|
||
Application.Quit();
|
||
System.Diagnostics.Process.GetCurrentProcess().Kill();
|
||
#elif UNITY_IOS
|
||
Application.Quit();
|
||
#else
|
||
Application.Quit();
|
||
#endif
|
||
}
|
||
|
||
|
||
// ===============================
|
||
// SAVE SYSTEM
|
||
// ===============================
|
||
private void DetectSaveFile()
|
||
{
|
||
hasSave = PlayerPrefs.HasKey("LastPlayedLevel");
|
||
}
|
||
|
||
private void ConfigureContinueButton()
|
||
{
|
||
if (!hasSave)
|
||
{
|
||
btnContinue.interactable = false;
|
||
var text = btnContinue.GetComponentInChildren<Text>();
|
||
if (text != null) text.color = new Color(1f, 1f, 1f, 0.4f);
|
||
}
|
||
else
|
||
{
|
||
btnContinue.interactable = true;
|
||
}
|
||
}
|
||
|
||
// ===============================
|
||
// AUDIO
|
||
// ===============================
|
||
private void PlayMenuMusic()
|
||
{
|
||
if (musicSource == null || menuMusic == null)
|
||
return;
|
||
|
||
musicSource.clip = menuMusic;
|
||
musicSource.loop = true;
|
||
|
||
if (!musicSource.isPlaying)
|
||
musicSource.Play();
|
||
}
|
||
|
||
private void PlayClick()
|
||
{
|
||
if (sfxSource != null && clickSound != null)
|
||
sfxSource.PlayOneShot(clickSound);
|
||
}
|
||
|
||
private void ValidateComponents()
|
||
{
|
||
if (btnSettings == null)
|
||
Debug.LogWarning("Btn_Settings atanmadı!");
|
||
}
|
||
}
|