AppManager.cs 3.29 KB
using UnityEngine;
using System.Collections;

public class AppManager : Singleton<AppManager>
{
    public AVProWindowsMediaMovie movieScript;
    public Canvas serverCanvas;
    public CanvasGroup inUseCanvas;
    public CanvasGroup timeoutCanvas;
    public CanvasGroup videoCanvas;
    public float tweenTime;
    public float appTimeout;

    public void Initialize()
    {
        inUseCanvas.alpha = 1;
        timeoutCanvas.alpha = 0;
        videoCanvas.alpha = 0;
        StartCoroutine(AppTimeout());
    }

    private bool _videoPlaying = false;
    private float _timeout = 0;
    private bool _didTimeout = false;

    private IEnumerator AppTimeout()
    {
        while(true)
        {
            _timeout = 0;
            _didTimeout = false;

            while (!_videoPlaying)
            {
                if (!_didTimeout)
                    _timeout += Time.deltaTime;

                if (_timeout >= appTimeout && !_didTimeout)
                {
                    _didTimeout = true;

                    TweenCanvasGroup(inUseCanvas, 0, tweenTime);
                    TweenCanvasGroup(timeoutCanvas, 1, tweenTime);
                }

                yield return null;
            }

            yield return null;
        }
    }

    public void ResetTimer()
    {
        if (_videoPlaying) return;

        TweenCanvasGroup(inUseCanvas, 1, tweenTime);
        TweenCanvasGroup(timeoutCanvas, 0, tweenTime);

        _timeout = 0;
        _didTimeout = false;
    }

    public void DestroyServerCanvas()
    {
        if (serverCanvas != null)
            Destroy(serverCanvas.gameObject);
    }

    private Coroutine movieCoroutine;

    public void LoadMovie(string filename)
    {
        movieScript.UnloadMovie();

        movieScript._filename = filename;
        movieScript.LoadMovie(true);

        if (movieCoroutine != null)
            StopCoroutine(movieCoroutine);

        movieCoroutine = StartCoroutine(MoviePlaying());
    }

    private IEnumerator MoviePlaying()
    {
        StopCoroutine("AppTimeout");

        _videoPlaying = true;
        TweenCanvasGroup(videoCanvas, 1, tweenTime);
        //TweenCanvasGroup(inUseCanvas, 0, tweenTime);
        //TweenCanvasGroup(timeoutCanvas, 0, tweenTime);

        float holdTime = movieScript.MovieInstance.DurationSeconds - tweenTime;

        yield return new WaitForSeconds(holdTime);

        TweenCanvasGroup(videoCanvas, 0, tweenTime);
        TweenCanvasGroup(inUseCanvas, 1, tweenTime);

        yield return new WaitForSeconds(tweenTime);

        _videoPlaying = false;
        movieScript.UnloadMovie();

        StartCoroutine("AppTimeout");
    }

    public void TweenCanvasGroup(CanvasGroup group, float alpha, float time)
    {
        TweenCanvasGroup(group, alpha, time, null);
    }

    public void TweenCanvasGroup(CanvasGroup group, float alpha, float time, System.Action onComplete)
    {
        iTween.Stop(group.gameObject);

        Hashtable hash = new Hashtable()
        {
            { "from", group.alpha },
            { "to", alpha },
            { "time", time },
            { "onupdate", (System.Action<object>)(x => group.alpha = (float) x) }
        };

        if (onComplete != null)
            hash.Add("oncomplete", (System.Action<object>)(x => onComplete()));

        iTween.ValueTo(group.gameObject, hash);
    }
}