//UnityEngine.Debug.Log Dir http://docs.unity3d.com/Manual/UnityEngine.Debug.LogFiles.html using UnityEngine; using System; using System.IO; using System.Threading; using System.Collections; using System.Collections.Generic; public class PlayerManager : GenericPlayerManager { private Server server = null; private volatile Queue messages = new Queue(); private readonly Semaphore finalizationLocker = new Semaphore(0, 1); private readonly object messageQueueLocker = new object(); public Semaphore FinalizationLocker { get { return this.finalizationLocker; } } public object MessageQueueLocker { get { return this.messageQueueLocker; } } public override void Start() { base.Start(); Screen.SetResolution(800, 600, false); Debug.Log("PM.S(): Setting args"); string[] args = Environment.GetCommandLineArgs(); if (args.Length >= 5) { float speedRate = (int.Parse(args[4]) + 100F) / 100F; if (speedRate > 100) base.fadeLength = 0.5F; DefaultSignSpeed ds = base.subtitles.DefaultWordSpeed; base.subtitles.DefaultWordSpeed = new DefaultSignSpeed( ds.Speed * speedRate, ds.Max * speedRate ); } if (args.Length >= 6) { float speedRate = (int.Parse(args[5]) + 100F) / 100F; if (speedRate > 100F) base.fadeLength = 0.5F; DefaultSignSpeed ds = base.subtitles.DefaultFirstLetterSpeed; base.subtitles.DefaultFirstLetterSpeed = new DefaultSignSpeed( ds.Speed * speedRate, ds.Max * speedRate ); ds = base.subtitles.DefaultLetterSpeed; base.subtitles.DefaultLetterSpeed = new DefaultSignSpeed( ds.Speed * speedRate, ds.Max * speedRate ); } Debug.Log("PM.S(): Setting lockers"); // Starts thread to wait for app finalization new Thread(new ThreadStart(waitFinalize)).Start(); Debug.Log("PM.S(): Starting server"); // Start server server = new Server(this); new Thread(new ThreadStart(server.StartCommunication)).Start(); // Starts communication thread and wait for finalize StartCoroutine(MessageChecker()); } public void enqueueMessage(Message message) { UnityEngine.Debug.Log("PM.eM(): " + message.Text + ", " + message.Time); messages.Enqueue(message); } private void waitFinalize() { Debug.Log("PM.WF(): START"); FinalizationLocker.WaitOne(); Debug.Log("PM.WF(): Finalize command received"); Application.Quit(); } IEnumerator MessageChecker() { Debug.Log("PM.MC(): START"); while (server.IsNotReady) yield return null; Debug.Log("PM.MC(): Starting to read messages"); CameraCapture.capture = true; foreach (Message message in messages) { while ((CameraCapture.frameNumber * 1000) / CameraCapture.frameRate < message.Time) yield return null; UnityEngine.Debug.Log("PM.MC(): Loading " + message.Text); base.playQueued(message.Text); } while (base.isPlaying() || base.isLoading()) yield return null; UnityEngine.Debug.Log("PM.MC(): All done!"); server.SendFinalizeToCore(); CameraCapture.capture = false; UnityEngine.Debug.Log("PM.MC(): CameraCapture.capture == " + CameraCapture.capture); Application.Quit(); } public override WWW loadAssetBundle(string aniName) { string assetPath = Application.dataPath + "/Bundles/" + aniName; if ( ! File.Exists(assetPath)) return null; try { WWW www = new WWW("file://" + assetPath); return www; } catch (Exception e) { UnityEngine.Debug.Log(e); } return null; } public override void onPlayingStateChange() { } public override void onConnectionError(string gloss, string word) { } }