This repository has been archived on 2023-09-13. You can view files and clone it, but cannot push or open issues or pull requests.
station_obscurum_unity/Assets/Scripts/Game/InGameManager.cs

155 lines
3.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class InGameManager : MonoBehaviour
{
[SerializeField]
private Volume gameVolume;
[SerializeField]
private Volume pausedVolume;
[SerializeField]
private bool isPaused = false;
private bool isTransitioning = false;
[SerializeField]
private float pauseTransitionDuration = 1f;
[SerializeField]
private Canvas gameCanvas;
[SerializeField]
private Canvas pausedCanvas;
public bool IsPaused { get { return this.isPaused; } }
public void TogglePause()
{
if (!isTransitioning)
{
isPaused = !isPaused;
Cursor.visible = isPaused;
if (!isPaused)
{
Cursor.lockState = CursorLockMode.Locked;
}
else
{
Cursor.lockState = CursorLockMode.None;
}
StartCoroutine(pauseTransition());
}
}
public void UnPause()
{
if (!isTransitioning)
{
isPaused = false;
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = isPaused;
StartCoroutine(pauseTransition());
}
}
public void Pause()
{
if (!isTransitioning)
{
isPaused = true;
Cursor.lockState = CursorLockMode.None;
Cursor.visible = isPaused;
StartCoroutine(pauseTransition());
}
}
IEnumerator pauseTransition()
{
if (pausedCanvas.gameObject.activeInHierarchy && !isPaused)
{
pausedCanvas.gameObject.SetActive(false);
}
if (gameCanvas.gameObject.activeInHierarchy && isPaused)
{
gameCanvas.gameObject.SetActive(false);
}
this.isTransitioning = true;
yield return new WaitForSeconds(0);
this.isTransitioning = false;
print("Unpause canvas?" + isPaused+","+pausedCanvas.gameObject.activeInHierarchy);
if (!pausedCanvas.gameObject.activeInHierarchy && isPaused)
{
pausedCanvas.gameObject.SetActive(true);
}
if (!gameCanvas.gameObject.activeInHierarchy && !isPaused)
{
gameCanvas.gameObject.SetActive(true);
}
}
// Start is called before the first frame update
void Start()
{
isPaused = false;
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = isPaused;
gameVolume.weight = 1;
pausedVolume.weight = 0;
gameCanvas.gameObject.SetActive(true);
pausedCanvas.gameObject.SetActive(false);
}
// Update is called once per frame
void Update()
{
if (Input.GetButtonDown("Pause"))
{
this.TogglePause();
print("Toggled!");
}
if (isTransitioning||true)
{
if (isPaused)
{
//transition into pause
//gameVolume.weight = Mathf.Lerp(gameVolume.weight, 0, Time.deltaTime);
//pausedVolume.weight = Mathf.Lerp(pausedVolume.weight, 1, Time.deltaTime);
//gameVolume.weight = gameVolume.weight < 0.1 ? 0 : gameVolume.weight;
//pausedVolume.weight = pausedVolume.weight > 0.9 ? 1 : pausedVolume.weight;
gameVolume.weight = 0;
pausedVolume.weight = 1;
}
else
{
//transition out of pause
gameVolume.weight = 1;
pausedVolume.weight = 0;
}
}
}
public void ExitToMenu()
{
SceneManager.LoadScene(0);
}
}