using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using TMPro; public class GameController : MonoBehaviour { private static GameController instance; [SerializeField] private string startScene, mainScene, endScene; [SerializeField] private float fadeSpeed; [SerializeField] private Image fadeImg; [SerializeField] private TMP_Text coinText; private Coroutine fadeCoroutine; private int coinAmount = 0; public int CoinAmount{get=>coinAmount;} public static GameController Instance{ get{ if(instance is null)Debug.LogError("Game controller is null"); return instance; } } private void Awake() { if(GameController.Instance is null){ instance = this; DontDestroyOnLoad(this.gameObject); SceneManager.activeSceneChanged += ChangedScene; coinText.text = "0"; Debug.Log("Awake"); if(!SceneManager.GetActiveScene().name.Equals(mainScene)){ coinText.gameObject.SetActive(false); }else{ coinText.gameObject.SetActive(true); } }else{ Destroy(this.gameObject); } } public void AddCoins(int amount){ //This should not be like this. Collectible should call the player that hit it and add to their amount coinAmount += amount; coinText.text = coinAmount.ToString(); } public void StartGame(){ fadeCoroutine = StartCoroutine(FadeToBlack(mainScene, true,fadeSpeed)); } public void EndGame(){ Debug.Log("Game is over"); fadeCoroutine = StartCoroutine(FadeToBlack(endScene, true,fadeSpeed)); } public void QuitGame(){ //fadeCoroutine = StartCoroutine(FadeToBlack(true,fadeTimer)); Application.Quit(); } public void Options(){ //fadeCoroutine = StartCoroutine(FadeToBlack(true,fadeTimer)); Debug.Log("Clicked options"); } public void MainMenu(){ fadeCoroutine = StartCoroutine(FadeToBlack(startScene, true,fadeSpeed)); } private void ChangedScene(Scene curr, Scene next){ fadeCoroutine = StartCoroutine(FadeToBlack(string.Empty, false, fadeSpeed)); if(!next.name.Equals(mainScene)){ coinText.gameObject.SetActive(false); }else{ coinText.gameObject.SetActive(true); } } public IEnumerator FadeToBlack(string sceneToLoad,bool fadeToBlack = true, float fadeSpeed = 2.5f){ Color imgColor = fadeImg.color; float fadeAmount; if(fadeToBlack){ while(fadeImg.color.a < 1){ fadeAmount = imgColor.a + (fadeSpeed * Time.deltaTime); imgColor = new Color(imgColor.r, imgColor.g, imgColor.b, fadeAmount); fadeImg.color = imgColor; yield return null; } SceneManager.LoadScene(sceneToLoad); }else{ while(fadeImg.color.a > 0){ fadeAmount = imgColor.a - (fadeSpeed * Time.deltaTime); imgColor = new Color(imgColor.r, imgColor.g, imgColor.b, fadeAmount); fadeImg.color = imgColor; yield return null; } } } }