using UnityEngine;
using UnityEngine.InputSystem;
using _Project.Scripts.PlayerUtils;
using UnityEngine.SceneManagement; // Подключаем пространство имен с нашими модулями игрока
namespace _Project.Scripts
{
public class UIPanel : MonoBehaviour
{
[Header("UI элементы")]
[SerializeField] private GameObject panel;
private bool isInMenu = false;
private void Start()
{
// Подписываемся на кнопку меню через главный класс Игрока.
// Теперь нам не нужно создавать свои controls, мы используем общие.
Player.Instance.Controls.Player.EnterMenu.performed += ctx => ToggleMenu();
// Гарантируем, что на старте игры меню закрыто
CloseMenu();
}
private void OnDestroy()
{
// Отписываемся во избежание утечек памяти
// Проверка на null нужна на случай закрытия игры, когда Player уже уничтожен
if (Player.Instance != null && Player.Instance.Controls != null)
{
Player.Instance.Controls.Player.EnterMenu.performed -= ctx => ToggleMenu();
}
}
///
/// Переключатель состояния (открыть / закрыть)
///
public void ToggleMenu()
{
if (isInMenu)
{
CloseMenu();
}
else
{
OpenMenu();
}
}
public void ReloadScene()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
///
/// Открытие меню / Пауза
///
public void OpenMenu()
{
isInMenu = true;
if (panel != null)
panel.SetActive(true);
// Останавливаем игровое время (физика и FixedUpdate останавливаются автоматически)
Time.timeScale = 0f;
// Освобождаем курсор для кликов по кнопкам и слайдерам
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
// ОТКЛЮЧАЕМ ТОЛЬКО НУЖНЫЕ МОДУЛИ
// Input System продолжает работать при Time.timeScale = 0,
// поэтому нам нужно отключить камеру (чтобы не вращалась) и стрельбу (чтобы не стрелял).
if (Player.Instance != null)
{
Player.Instance.CameraController.enabled = false;
Player.Instance.Combat.enabled = false;
}
}
///
/// Закрытие меню (можно привязать к кнопке "Продолжить" в UI)
///
public void CloseMenu()
{
isInMenu = false;
if (panel != null)
panel.SetActive(false);
// Возобновляем время
Time.timeScale = 1f;
// Прячем и лочим курсор обратно в прицел
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
// Включаем модули обратно
if (Player.Instance != null)
{
Player.Instance.CameraController.enabled = true;
Player.Instance.Combat.enabled = true;
}
}
}
}