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>
This commit is contained in:
commit
ecb1c9edea
1455 changed files with 933295 additions and 0 deletions
215
Assets/Scripts/LevelMapScene.cs
Normal file
215
Assets/Scripts/LevelMapScene.cs
Normal file
|
|
@ -0,0 +1,215 @@
|
|||
using System.Collections;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class LevelMapScene : MonoBehaviour
|
||||
{
|
||||
[Header("━━━ UI ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")]
|
||||
public TMP_Text infoText;
|
||||
public TMP_Text totalScoreText;
|
||||
public Image infoBackground;
|
||||
|
||||
[Header("━━━ INFO HIDE ━━━━━━━━━━━━━━━━━━━━━━━━━")]
|
||||
public float infoHideDelay = 5f;
|
||||
|
||||
[Header("━━━ AUDIO ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")]
|
||||
public AudioSource bgMusic;
|
||||
public AudioSource clickSound;
|
||||
|
||||
[Header("━━━ SCENES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━")]
|
||||
public Button backButton;
|
||||
public string backSceneName = "modsec 1";
|
||||
|
||||
[Header("Her level ayrı sahneye gidiyorsa AÇIK bırak (GameScene_Level1, GameScene_Level2 ...)")]
|
||||
public bool usePerLevelScene = true;
|
||||
|
||||
[Header("Ayrı sahne kullanılıyorsa bu ön ek + levelID kullanılır")]
|
||||
public string levelScenePrefix = "GameScene_Level"; // -> GameScene_Level1
|
||||
|
||||
[Header("Tüm leveller TEK sahneye gidiyorsa burayı kullan (usePerLevelScene KAPALI iken)")]
|
||||
public string singleGameSceneName = "GameScene";
|
||||
|
||||
[Header("━━━ PLANETS / LEVEL BUTTONS ━━━━━━━━━━")]
|
||||
public Button[] levelButtons;
|
||||
|
||||
[Header("━━━ LEVEL LOCK SETTINGS ━━━━━━━━━━━━━━")]
|
||||
public bool useScoreLock = true;
|
||||
|
||||
private int playerTotalScore;
|
||||
private Coroutine hideInfoCoroutine;
|
||||
|
||||
private readonly int[] requiredScores = new int[20]
|
||||
{
|
||||
0, 1000, 2000, 3000, 4000,
|
||||
5000, 6000, 7000, 8000, 9000,
|
||||
10000, 11000, 12000, 13000, 14000,
|
||||
15000, 16000, 17000, 18000, 19000
|
||||
};
|
||||
|
||||
void Start()
|
||||
{
|
||||
playerTotalScore = PlayerPrefs.GetInt("TotalScore", 0);
|
||||
|
||||
if (totalScoreText != null)
|
||||
totalScoreText.text = "Your Total Score: " + playerTotalScore;
|
||||
|
||||
if (infoText != null)
|
||||
{
|
||||
infoText.text = "";
|
||||
infoText.alpha = 0f;
|
||||
}
|
||||
|
||||
if (infoBackground != null)
|
||||
{
|
||||
infoBackground.gameObject.SetActive(false);
|
||||
infoBackground.color = new Color(1f, 1f, 1f, 0.70f);
|
||||
}
|
||||
|
||||
if (bgMusic != null)
|
||||
{
|
||||
bgMusic.loop = true;
|
||||
bgMusic.Play();
|
||||
}
|
||||
|
||||
SetupLevelButtons();
|
||||
|
||||
if (backButton != null)
|
||||
{
|
||||
backButton.onClick.RemoveAllListeners();
|
||||
backButton.onClick.AddListener(GoBack);
|
||||
}
|
||||
}
|
||||
|
||||
void SetupLevelButtons()
|
||||
{
|
||||
if (levelButtons == null || levelButtons.Length == 0)
|
||||
{
|
||||
Debug.LogError("LevelMapScene: Level Buttons atanmadı.");
|
||||
return;
|
||||
}
|
||||
|
||||
int buttonCount = Mathf.Min(levelButtons.Length, requiredScores.Length);
|
||||
|
||||
for (int i = 0; i < buttonCount; i++)
|
||||
{
|
||||
int levelID = i + 1;
|
||||
|
||||
if (levelButtons[i] == null)
|
||||
{
|
||||
Debug.LogWarning("LevelMapScene: Level button boş index: " + i);
|
||||
continue;
|
||||
}
|
||||
|
||||
levelButtons[i].interactable = true;
|
||||
levelButtons[i].onClick.RemoveAllListeners();
|
||||
levelButtons[i].onClick.AddListener(() => OnLevelSelect(levelID));
|
||||
}
|
||||
}
|
||||
|
||||
void OnLevelSelect(int levelID)
|
||||
{
|
||||
if (clickSound != null)
|
||||
clickSound.Play();
|
||||
|
||||
if (levelID < 1 || levelID > requiredScores.Length)
|
||||
{
|
||||
Debug.LogError("Geçersiz levelID: " + levelID);
|
||||
return;
|
||||
}
|
||||
|
||||
int neededScore = requiredScores[levelID - 1];
|
||||
|
||||
// ❌ KİLİTLİ
|
||||
if (useScoreLock && playerTotalScore < neededScore)
|
||||
{
|
||||
ShowInfo(
|
||||
"LEVEL LOCKED\n\n" +
|
||||
"Level: " + levelID + "\n" +
|
||||
"Your Total Score: " + playerTotalScore + "\n" +
|
||||
"Required Score: " + neededScore,
|
||||
new Color32(255, 70, 70, 255));
|
||||
return;
|
||||
}
|
||||
|
||||
// ✔ AÇIK → sahneyi belirle
|
||||
string sceneToLoad = usePerLevelScene
|
||||
? (levelScenePrefix + levelID) // GameScene_Level1
|
||||
: singleGameSceneName; // GameScene
|
||||
|
||||
// Sahne Build Settings'te var mı? Kontrol et
|
||||
if (!Application.CanStreamedLevelBeLoaded(sceneToLoad))
|
||||
{
|
||||
ShowInfo(
|
||||
"SAHNE BULUNAMADI\n\n" +
|
||||
"'" + sceneToLoad + "'\n" +
|
||||
"Build Settings'e ekli değil!",
|
||||
new Color32(255, 170, 50, 255));
|
||||
|
||||
Debug.LogError("Sahne yüklenemiyor: '" + sceneToLoad +
|
||||
"'. File > Build Settings içine eklediğinden ve adının birebir aynı olduğundan emin ol.");
|
||||
return;
|
||||
}
|
||||
|
||||
ShowInfo(
|
||||
"LEVEL OPENED\n\n" +
|
||||
"Level: " + levelID + "\n" +
|
||||
"Loading...",
|
||||
new Color32(70, 255, 100, 255));
|
||||
|
||||
PlayerPrefs.SetInt("SelectedLevel", levelID);
|
||||
PlayerPrefs.SetInt("SelectedStoryLevel", levelID);
|
||||
PlayerPrefs.SetString("LastPlayedMod", "Mod1");
|
||||
PlayerPrefs.Save();
|
||||
|
||||
StartCoroutine(LoadGameSceneDelay(sceneToLoad));
|
||||
}
|
||||
|
||||
void ShowInfo(string message, Color color)
|
||||
{
|
||||
if (infoBackground != null)
|
||||
infoBackground.gameObject.SetActive(true);
|
||||
|
||||
if (infoText != null)
|
||||
{
|
||||
infoText.alpha = 1f;
|
||||
infoText.color = color;
|
||||
infoText.text = message;
|
||||
}
|
||||
|
||||
if (hideInfoCoroutine != null)
|
||||
StopCoroutine(hideInfoCoroutine);
|
||||
|
||||
hideInfoCoroutine = StartCoroutine(HideInfoAfterDelay());
|
||||
}
|
||||
|
||||
IEnumerator LoadGameSceneDelay(string sceneToLoad)
|
||||
{
|
||||
yield return new WaitForSeconds(0.35f);
|
||||
SceneManager.LoadScene(sceneToLoad);
|
||||
}
|
||||
|
||||
IEnumerator HideInfoAfterDelay()
|
||||
{
|
||||
yield return new WaitForSeconds(infoHideDelay);
|
||||
|
||||
if (infoText != null)
|
||||
{
|
||||
infoText.text = "";
|
||||
infoText.alpha = 0f;
|
||||
}
|
||||
|
||||
if (infoBackground != null)
|
||||
infoBackground.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
void GoBack()
|
||||
{
|
||||
if (clickSound != null)
|
||||
clickSound.Play();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(backSceneName))
|
||||
SceneManager.LoadScene(backSceneName);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue