PlayerManager.cs 4.77 KB
//Log Dir		 http://docs.unity3d.com/Manual/LogFiles.html

// requisiçao http get no unity
// vlibras.lavid.ufpb.br:5000/glosa?texto=CASA%LAVID%123	
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;
using UnityEngine.UI;
using System.Threading;

public class PlayerManager : GenericPlayerManager {

	private const string BASE_URL = "http://150.165.205.9/anims/ANDROID/";
	private const string SERVER_URL = "http://vlibras.lavid.ufpb.br/glosa?texto=";

	protected VoiceRecognition voiceRecognizer;

	public InputField translateScreenText;

	private int version = 1;

	private string[] randomAnimationNames = new string[] {
		"[RELAXAR]",
		"[BOCEJAR]",
		"[COCHILAR]",
		"[ESPREGUI_ADA]"
	};

	public GameObject textButton;
	public GameObject pauseButton;
	public GameObject pauseMenu;
	private SwitchImageAttribute pauseButtonImage;

	public ScreenManager screenManager;

	public override void Start()
	{
		this.pauseButtonImage = this.pauseButton.GetComponent<SwitchImageAttribute>();
		
		base.setRandomAnimations(randomAnimationNames);
		base.Start();

		// DEBUG: var onLoadPlayer = function(){}
		Application.ExternalCall("onLoadPlayer");
		voiceRecognizer = new VoiceRecognition();

		Screen.fullScreen = false;
		// Hide input text preview
		TouchScreenKeyboard.hideInput = true;
	}

	public void start_play() {
		base.play();
	}

	// Stop loading, if loading
	// Don't stop animations, if playing
	// Load glosa, enqueue animations
	public void forcePlayFromCache() {
		base.play(base.gloss, true, false, true);
	}

	public void start_play(string gloss)
	{
		if (gloss == null || String.IsNullOrEmpty(gloss.Trim()))
			return;

		base.gloss = gloss;
		forcePlayFromCache();
	}

	public void playDict(string word)
	{
		base.gloss = word;
		base.play(word, true, true, true);

		this.screenManager.hideScreen();
		this.screenManager.setPauseMenuState(false);
	}

	public void playTranslate()
	{
		stopTranslation();
		StartCoroutine("translate", translateScreenText.text);

		this.screenManager.setPauseMenuState(false);
	}

	public void stopTranslation()
	{
		StopCoroutine("translate");
		this.randomAnimations.unlockFor("translate");
	}

	public Text debugText;

	protected override WWW loadAssetBundle(string aniName) {
		return WWW.LoadFromCacheOrDownload(BASE_URL + aniName, version);
	}

	private bool playingState = false;

	private void setPlayingState(bool state)
	{
		if (this.playingState != state)
		{
			this.playingState = state;

			this.textButton.SetActive( ! state);
			this.pauseButton.SetActive(state);
		}
	}

	private System.Object stateLocker = new System.Object();

	protected override void onPlayingStateChange()
	{
		lock (this.stateLocker)
		{
			//this.screenManager.setRepeatLayerState(base.isRepeatable() && ! base.isPlaying());

			if (base.isPlaying() && ! base.isPlayingIntervalAnimation())
			{
				setPlayingState(true);

				if (base.isPaused())
				{
					this.pauseButtonImage.switchAttribute(true);
					this.screenManager.setPauseMenuState(true);
				}
				else
				{
					this.pauseButtonImage.switchAttribute(false);
					this.screenManager.setPauseMenuState(false);
				}
			}
			else setPlayingState(false);
		}
	}

	// Called from microphone icon at main interface
	public void callVoiceRecognizer()
	{
		string gloss = voiceRecognizer.callRecognition();
		//voiceRecognizerScreenConfirm.SetActive(true);
		
		InputField inp = GameObject.FindGameObjectWithTag("field_text_entry").GetComponent<InputField>() as InputField;
		inp.text = gloss;

		this.screenManager.switchScreen("translate");
	}

	private System.Object translateLocker = new System.Object();

	private IEnumerator translate(string gloss)
	{
		lock (this.translateLocker)
		{
			base.randomAnimations.lockFor("translate");
			this.screenManager.setLoadingSnippetState(true);

			WWW glossRequest = new WWW(SERVER_URL + WWW.EscapeURL(gloss));

			if (glossRequest != null)
			{
				yield return glossRequest.isDone;

				if (glossRequest.error == null)
				{
					yield return glossRequest;

					if ( ! String.IsNullOrEmpty(glossRequest.text))
					{
						Debug.Log("Server answer: " + glossRequest.text);

						base.playNext(glossRequest.text);
						this.screenManager.setLoadingSnippetState(false);
						base.randomAnimations.unlockFor("translate");

						yield break;
					}
					else Debug.Log("Error at PlayerManager.translate: empty answer.");
				}
				else Debug.Log("Error at PlayerManager.translate: (WWW) glosaRequest: " + glossRequest.error);
			}
			else Debug.Log ("Error at PlayerManager.translate: (WWW) glosaRequest is NULL.");

			base.gloss = gloss.ToUpper();

			this.screenManager.setLoadingSnippetState(false);
			this.screenManager.showConnectionErrorDialog();
			base.randomAnimations.unlockFor("translate");
		}
	}

}