pgiz4_moi/Assets/Scripts/UIManager.cs

86 lines
2.6 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;
public class UIManager : MonoBehaviour
{
[Header("In-Game UI")]
public TextMeshProUGUI coinText;
[Header("Game Over UI")]
public GameObject gameOverPanel;
public TextMeshProUGUI finalScoreText;
public TMP_InputField nameInputField;
public Button saveButton;
[Header("Scene Names")]
public string mainMenuSceneName = "MainMenuScene"; // Имя сцены главного меню
private const string HighScoreKey = "HighScores";
void Start()
{
PlayerController.OnPlayerDied += ShowGameOverScreen;
if (gameOverPanel != null) gameOverPanel.SetActive(false);
if (saveButton != null) saveButton.onClick.AddListener(SaveScoreAndReturnToMenu);
}
void OnDestroy()
{
PlayerController.OnPlayerDied -= ShowGameOverScreen;
}
void Update()
{
if (coinText != null)
{
coinText.text = "Монеты: " + PlayerController.coinCount;
}
}
void ShowGameOverScreen()
{
if (gameOverPanel != null && finalScoreText != null)
{
gameOverPanel.SetActive(true);
finalScoreText.text = "Ваш результат: " + PlayerController.coinCount;
if (nameInputField != null)
{
nameInputField.onValueChanged.AddListener(delegate { ValidateInput(); });
saveButton.interactable = false;
}
}
}
void ValidateInput()
{
saveButton.interactable = !string.IsNullOrEmpty(nameInputField.text);
}
public void SaveScoreAndReturnToMenu()
{
string playerName = nameInputField.text;
int score = PlayerController.coinCount;
string json = PlayerPrefs.GetString(HighScoreKey, "{}");
HighScoreList highScores = JsonUtility.FromJson<HighScoreList>(json);
if (highScores.scores == null)
{
highScores.scores = new System.Collections.Generic.List<HighScoreEntry>();
}
highScores.scores.Add(new HighScoreEntry { playerName = playerName, score = score });
string updatedJson = JsonUtility.ToJson(highScores);
PlayerPrefs.SetString(HighScoreKey, updatedJson);
PlayerPrefs.Save();
Debug.Log("Результат сохранен. Возврат в главное меню.");
// Возобновляем время и загружаем главное меню
Time.timeScale = 1f;
SceneManager.LoadScene(mainMenuSceneName);
}
}