NetworkUser.cs 3.37 KB
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine.Networking;

public class NetworkUser : NetworkBehaviour
{
    public Transform buttonParent;
    public GameObject clientCanvas;
    public CanvasGroup timeoutCanvas;
    public List<MoviePlayNode> movieButtonNodes;

    void Awake()
    {
        timeoutCanvas.alpha = 0;
        timeoutCanvas.interactable = false;
        timeoutCanvas.blocksRaycasts = false;
    }

    void Start()
    {
        if (!isServer)
        {
            StartCoroutine(WaitForFiles());
        }
        else
        {
            Destroy(clientCanvas);
            string path = Application.streamingAssetsPath + "/videoSettings.json";
            if (!File.Exists(path))
            {
                Debug.LogError("NetworkUser Error: No videoSettings.json file found");
                return;
            }
            string json = File.ReadAllText(path);
            RpcGetFiles(json);
        }
    }

    public List<Dictionary<string, string>> _files;

    private IEnumerator WaitForFiles()
    {
        while (_files == null)
            yield return null;
        
        foreach(var dict in _files)
        {
            MoviePlayNode thisNode = null;
            foreach(MoviePlayNode n in movieButtonNodes)
            {
                if (n.objTag == dict["tag"])
                {
                    thisNode = n;
                    break;
                }
            }

            if (thisNode == null)
            {
                Debug.LogError("There is no node with tag " + dict["tag"]);
                continue;
            }

            thisNode.Initialize(dict["filename"], this);
        }
    }

    [ClientRpc]
    private void RpcGetFiles(string json)
    {
        var tempList = (IList)MiniJSON.Json.Deserialize(json);

        _files = new List<Dictionary<string, string>>();
        
        foreach (IDictionary dict in tempList)
        {
            var thisDict = new Dictionary<string, string>();
            foreach(DictionaryEntry de in dict)
                thisDict.Add(de.Key.ToString(), de.Value.ToString());

            _files.Add(thisDict);
        }
    }

    private bool _isTimedOut = true;

    [ClientRpc]
    public void RpcTimeout()
    {
        _isTimedOut = true;

        AppManager.Instance.TweenCanvasGroup(timeoutCanvas, 1, 0.5f);
        timeoutCanvas.interactable = true;
        timeoutCanvas.blocksRaycasts = true;
    }

    private void HideTimeout()
    {
        if (!_isTimedOut) return;

        AppManager.Instance.TweenCanvasGroup(timeoutCanvas, 0, 0.5f);
        timeoutCanvas.interactable = false;
        timeoutCanvas.blocksRaycasts = false;

        _isTimedOut = false;
    }
	
	void Update ()
    {
        if (Input.touchCount > 0)
        {
            CmdResetTimer();
            HideTimeout();
        }

        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            var thisDict = _files[0];
            CmdLoadVideo(thisDict["filename"]);
        }

        if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            var thisDict = _files[1];
            CmdLoadVideo(thisDict["filename"]);
        }
    }

    [Command]
    private void CmdResetTimer()
    {
        ServerCanvasManager.Instance.ResetTimer();
    }

    [Command]
    public void CmdLoadVideo(string file)
    {
        ServerCanvasManager.Instance.LoadMovie(file);
    }
}