using UnityEngine;
using System.Collections;

public class FadeInOutManager : MonoBehaviour
{

    public static FadeInOutManager Instance { get; private set; }
    public Texture2D fadeOutTexture; // slika koja ce prekiti ekran
    public float fadeSpeed = 0.8f; // brzina tranzicije izmedju scena

    private int drawDepth = -1000; // red tekstura u hijerarije crtanja, najnizi broj bice renderovano na vrhu
    private float alpha = 1.0f; // alfa vrednost teksture
    private int fadeDir = -1; // smer -1 spolja +1 ka unutra
    void Awake()
    {
        //Proveramo da li postoji vec instanca koja je razlicita od trenutne
        if (Instance != null && Instance != this)
        {
            //unistava instancu
            Destroy(gameObject);
        }
        //Cuvamo trenutnu instancu
        Instance = this;
    }
    void OnGUI()
    {
        // fade na osnovu smera,brzine i brzine promene frejma
        alpha += fadeDir * fadeSpeed * Time.deltaTime;
        // setovanje alfa vrednosti na silu izmedju 0 i 1
        alpha = Mathf.Clamp01(alpha);

        // podesava boju GUI-a (u nasem slucaju teksture) sve vrednosti ostaju iste samo se alfa setuje na alfa vrednost
        GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, alpha); // setovanje alfa vrednosti
        GUI.depth = drawDepth; // crdna tekstura na vrhu
        GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), fadeOutTexture); // postaviti tekstuiru preko celog ekrana

    }
    // postavlja smer tranizicije izmedju scena
    public float BeginFade(int direction)
    {
        fadeDir = direction;
        return fadeSpeed;
    }
    // poziva se nakon ucitavanja nove scene
    void OnLevelWasLoaded(int level)
    {
        // poziva metodu koja zapocinje traniziciju
        BeginFade(-1);
    }
    public void Fading(string location)
    {
        StartCoroutine(ChangeLevel(location));
    }
    IEnumerator ChangeLevel(string level)
    {
        // pronalzi objekat za koji je zakacena tekstura i skripta za tranziciju izmedju scena
        float fadeTime = GameObject.Find("GM").GetComponent<FadeInOutManager>().BeginFade(1);
        yield return new WaitForSeconds(fadeTime);
        // promena scene
        UnityEngine.SceneManagement.SceneManager.LoadScene(level);
    }

}
