Dave Boyle

Load filenames / titles for buttons from json streaming over network. button cli…

…cks load movies on server. timeout started
fileFormatVersion: 2
guid: e13b8882a7ba533438a133f2e7d91431
timeCreated: 1465142182
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
[
{
"filename":"sample-1920x1024-divx.avi",
"title":"test1"
},
{
"filename":"lookUponThisAndDespair.mp4",
"title":"test2"
}
]
\ No newline at end of file
fileFormatVersion: 2
guid: c27447788d27c3e46a51457c3c946143
timeCreated: 1465142182
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
No preview for this file type
fileFormatVersion: 2
guid: 2a6be515630c81a4b988e90741a7f6de
timeCreated: 1465145480
licenseType: Pro
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:
using UnityEngine;
using System.Collections;
public class AppManager : Singleton<AppManager>
{
public AVProWindowsMediaMovie movieScript;
public Canvas serverCanvas;
public CanvasGroup inactiveCanvas;
public float appTimeout;
void Start ()
{
inactiveCanvas.alpha = 1;
StartCoroutine(AppTimeout());
}
private bool _videoPlaying = false;
private IEnumerator AppTimeout()
{
while(true)
{
float timeout = 0;
bool didTimeout = false;
while (!_videoPlaying)
{
timeout += Time.deltaTime;
print(timeout);
if (timeout >= appTimeout && ! didTimeout)
{
didTimeout = true;
print("timeout");
}
yield return null;
}
yield return null;
}
}
public void DestroyServerCanvas()
{
Destroy(serverCanvas.gameObject);
}
private Coroutine movieCoroutine;
public void LoadMovie(string filename)
{
movieScript.UnloadMovie();
movieScript._filename = filename;
movieScript.LoadMovie(true);
TweenCanvasGroup(inactiveCanvas, 0, 1);
if (movieCoroutine != null)
StopCoroutine(movieCoroutine);
movieCoroutine = StartCoroutine(MoviePlaying());
}
private IEnumerator MoviePlaying()
{
_videoPlaying = true;
while (movieScript.MovieInstance.IsPlaying)
yield return null;
_videoPlaying = false;
}
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)
{
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);
}
}
using UnityEngine;
using System.Collections;
public class MovieLoader : Singleton<MovieLoader>
{
public AVProWindowsMediaMovie movieScript;
void Start () {
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.Space))
LoadMovie("sample-1920x1024-divx.avi");
}
public void LoadMovie(string filename)
{
movieScript._filename = filename;
movieScript.LoadMovie(true);
}
}
using UnityEngine;
using System.Collections;
public class MovieNode : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
fileFormatVersion: 2
guid: 17be018bbf1e14648965ed4257813488
timeCreated: 1465141228
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class MoviePlayNode : MonoBehaviour
{
[SerializeField]
private Text _textNode;
private string _filename;
private NetworkUser _netNode;
public void Initialize(string title, string filename, NetworkUser parent)
{
_textNode.text = title;
_filename = filename;
_netNode = parent;
}
public void PlayMovie()
{
_netNode.CmdLoadVideo(_filename);
}
}
fileFormatVersion: 2
guid: 08da2dd2f9ee0ff45982c789efc1477c
timeCreated: 1465145461
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine.Networking;
public class NetworkUser : NetworkBehaviour
{
void Start () {
}
public Transform buttonParent;
public MoviePlayNode movieButtonNode;
void Start()
{
if (!isServer)
{
AppManager.Instance.DestroyServerCanvas();
StartCoroutine(WaitForFiles());
}
else
{
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 mpn = Instantiate<MoviePlayNode>(movieButtonNode);
mpn.Initialize(dict["title"], dict["filename"], this);
mpn.transform.SetParent(buttonParent);
mpn.transform.localPosition = Vector3.zero;
mpn.transform.localScale = Vector3.one;
}
// Do things
}
[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);
}
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.Q))
CmdLoadVideo("sample-1920x1024-divx.avi");
}
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 CmdLoadVideo(string file)
public void CmdLoadVideo(string file)
{
MovieLoader.Instance.LoadMovie(file);
AppManager.Instance.LoadMovie(file);
}
}
......
fileFormatVersion: 2
guid: ac9625a3e3a3b6940b20ab48f4ae3f74
folderAsset: yes
timeCreated: 1465142193
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 42b9c08300f92b1409548cb10d273537
timeCreated: 1465142182
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
m_EditorVersion: 5.3.4f1
m_EditorVersion: 5.3.2f1
m_StandardAssetsVersion: 0
......