using UnityEngine;
using System;
using System.Collections;
using UnityEngine.SceneManagement;
#if UNITY_EDITOR
using UnityEditor;
#endif
///
/// Simple pause manager. Call Pause(true) to pause or Pause(false) to resume.
/// - overlayRoot: GameObject that will be enabled when paused and disabled when resumed.
/// - Pressing Escape toggles pause while the manager exists.
///
public class PauseManager : MonoBehaviour
{
public static PauseManager Instance { get; private set; }
[Header("Overlay")]
public GameObject overlayRoot; // object to enable/disable on pause
public bool IsPaused { get; private set; } = false;
// ������ͣ״̬�ı��¼�
public event Action OnPauseStateChanged;
void Awake()
{
if (Instance == null) Instance = this;
else Destroy(gameObject);
}
void Start()
{
if (overlayRoot != null)
overlayRoot.SetActive(false);
}
void Update()
{
// Delete = immediate quit (stop play in editor or quit app)
if (Input.GetKeyDown(KeyCode.Delete))
{
#if UNITY_EDITOR
EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
return;
}
if (Input.GetKeyDown(KeyCode.Escape))
{
TogglePause();
}
// ��������ͣ״̬�Ұ��� Backspace ʱ����������
if (IsPaused && Input.GetKeyDown(KeyCode.Backspace))
{
// �ָ�ʱ�����������¼���Ȼ�����������
Pause(false);
// ȷ��������������Ŀ�е�������ƥ��
StartCoroutine(LoadSceneAsync("Main_main"));
}
}
///
/// Pause or resume the game. Call Pause(true) to pause.
/// This implementation enables/disables overlayRoot and sets Time.timeScale.
///
public void Pause(bool pause)
{
if (pause)
{
if (IsPaused) return;
if (overlayRoot != null) overlayRoot.SetActive(true);
Time.timeScale = 0f;
IsPaused = true;
OnPauseStateChanged?.Invoke(true);
}
else
{
if (!IsPaused) return;
if (overlayRoot != null) overlayRoot.SetActive(false);
Time.timeScale = 1f;
IsPaused = false;
OnPauseStateChanged?.Invoke(false);
}
}
public void TogglePause()
{
Pause(!IsPaused);
}
private IEnumerator LoadSceneAsync(string sceneName)
{
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName);
while (!asyncLoad.isDone)
{
yield return null;
}
}
}