Afterparty/Assets/Features/UI/PauseMenuController.cs
2026-01-11 17:04:23 +03:00

89 lines
2.2 KiB
C#

using Player;
using UnityEngine;
public class PauseMenuController : MonoBehaviour
{
[Header("References")]
[SerializeField] private GameObject pauseMenuPanel;
[SerializeField] private GameObject settingsPanel;
[SerializeField] private PlayerController playerController;
private bool isPaused = false;
private void Start()
{
pauseMenuPanel.SetActive(false);
settingsPanel.SetActive(false);
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
// If settings are open, the first Escape press should close them
if (settingsPanel.activeSelf)
{
CloseSettings();
}
// If only the pause menu is open, Escape should resume the game
else if (isPaused)
{
ResumeGame();
}
// If not paused, Escape should pause the game
else
{
PauseGame();
}
}
}
public void PauseGame()
{
isPaused = true;
Time.timeScale = 0f;
pauseMenuPanel.SetActive(true);
settingsPanel.SetActive(false); // Ensure settings are closed initially
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
if (playerController != null) playerController.inputLocked = true;
}
public void ResumeGame()
{
isPaused = false;
Time.timeScale = 1f;
pauseMenuPanel.SetActive(false);
settingsPanel.SetActive(false);
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
if (playerController != null) playerController.inputLocked = false;
}
// --- Button Methods ---
public void OnResumeButtonClicked()
{
ResumeGame();
}
public void OpenSettings()
{
pauseMenuPanel.SetActive(false);
settingsPanel.SetActive(true);
}
public void CloseSettings()
{
settingsPanel.SetActive(false);
pauseMenuPanel.SetActive(true);
}
public void OnExitButtonClicked()
{
Debug.Log("Exiting application...");
Application.Quit();
}
}