using UnityEngine; using UnityEngine.InputSystem; using _Project.Scripts.PlayerUtils; // Подключаем пространство имен с нашими модулями игрока 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 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; } } } }