PlayerManager.cs 3.23 KB
//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;
using System.Runtime.InteropServices;
using System.Net.Sockets;
using System.Diagnostics;

public class PlayerManager : GenericPlayerManager {

	private Server server = null;
	private Semaphore serverSemaphore = null;

	private volatile Queue<Message> messages = new Queue<Message>();
	private volatile bool toFinalize = false;

	public override void Start()
	{
		base.Start();
		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
			);
		}

		serverSemaphore = new Semaphore(0, 1);
		server = new Server(serverSemaphore, this);
		Thread t = new Thread(new ThreadStart(server.startServer));
		t.Start();

		serverSemaphore.WaitOne();

		//UnityEngine.Debug.Log("Datapath: " + Application.dataPath);

		Screen.SetResolution(800, 600, false);
	}

	protected void Update() {
		if (toFinalize)
		{
			UnityEngine.Debug.Log("Update -> toFinalize == " + toFinalize);
			Application.Quit();
		}
	}

	public void enqueueMessage(Message message) {
		//UnityEngine.Debug.Log("PlayerManager.enqueueMessage( " + message.Text + " )");
		messages.Enqueue(message);
	}

	public void finishConnection() {
		//UnityEngine.Debug.Log("PlayerManager.finishConnection()");
		StartCoroutine(MessageChecker());
	}

	IEnumerator MessageChecker()
	{
		CameraCapture.capture = true;
		foreach (Message message in messages)
		{
			while ((CameraCapture.frameNumber * 1000) / CameraCapture.frameRate < message.Time)
				yield return null;

			UnityEngine.Debug.Log("Loading " + message.Text);
			base.playQueued(message.Text);
		}

		while (base.isPlaying() || base.isLoading())
			yield return null;

		UnityEngine.Debug.Log("ALL DONE!");
		server.sendFinalizeToCore();
		CameraCapture.capture = false;
		UnityEngine.Debug.Log("CameraCapture.capture == " + CameraCapture.capture);
		toFinalize = true;
		UnityEngine.Debug.Log("toFinalize == " + toFinalize);
	}

	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) { }

}