Commit e60792b120f21e2c2c5b4dddbfa5c69de1335c47

Authored by Mateus Lustosa
1 parent 66485826
Exists in master and in 1 other branch dev

Refatoracao; Animacoes aleatorias.

Assets/Bundles/[IAE] 0 → 100644
No preview for this file type
Assets/Bundles/[OI] 0 → 100644
No preview for this file type
Assets/Bundles/[OLA] 0 → 100644
No preview for this file type
Assets/Scripts/AnimationReference.cs 0 → 100644
... ... @@ -0,0 +1,19 @@
  1 +using UnityEngine;
  2 +
  3 +public class AnimationReference
  4 +{
  5 + public string name;
  6 + public string subtitle;
  7 + public AnimationState state;
  8 + public short type;
  9 + public bool playing;
  10 +
  11 + public AnimationReference(string name, string subtitle, AnimationState state, short type)
  12 + {
  13 + this.name = name;
  14 + this.subtitle = subtitle;
  15 + this.state = state;
  16 + this.type = type;
  17 + this.playing = false;
  18 + }
  19 +}
0 20 \ No newline at end of file
... ...
Assets/Scripts/AnimationReference.cs.meta 0 → 100644
... ... @@ -0,0 +1,12 @@
  1 +fileFormatVersion: 2
  2 +guid: 0a79f85598da5e245b6beae9133a8a26
  3 +timeCreated: 1452687065
  4 +licenseType: Pro
  5 +MonoImporter:
  6 + serializedVersion: 2
  7 + defaultReferences: []
  8 + executionOrder: 0
  9 + icon: {instanceID: 0}
  10 + userData:
  11 + assetBundleName:
  12 + assetBundleVariant:
... ...
Assets/Scripts/DefaultSignSpeed.cs 0 → 100644
... ... @@ -0,0 +1,63 @@
  1 +/**
  2 + * Configura a velocidade de reprodução de sinais com relação a uma
  3 + * velocidade padrão e a velocidade ajustada pelo usuário.
  4 + */
  5 +public class DefaultSignSpeed
  6 +{
  7 + public static float DEFAULT = 1.1F;
  8 + public static float DEFAULT_MAX = 2F;
  9 +
  10 + // Velocidade padrão
  11 + private float speed;
  12 + // Velocidade máxima
  13 + private float max;
  14 + // Relação entre a velocidade do tipo representado e a velocidade padrão (speed)
  15 + private float unit;
  16 +
  17 + public DefaultSignSpeed()
  18 + {
  19 + this.speed = DEFAULT;
  20 + this.max = DEFAULT_MAX;
  21 + this.unit = 1F;
  22 + }
  23 +
  24 + public DefaultSignSpeed(float defaultSpeed, float defaultMaxSpeed)
  25 + {
  26 + this.speed = defaultSpeed;
  27 + this.max = defaultMaxSpeed;
  28 + this.unit = (this.max - this.speed) / (DEFAULT_MAX - DEFAULT);
  29 + }
  30 +
  31 + public float Speed {
  32 + get { return this.speed; }
  33 + set {
  34 + this.speed = value;
  35 + this.unit = calculateUnit();
  36 + }
  37 + }
  38 + public float Max {
  39 + get { return this.max; }
  40 + set {
  41 + this.speed = value;
  42 + this.unit = calculateUnit();
  43 + }
  44 + }
  45 + public float Unit {
  46 + get { return this.unit; }
  47 + }
  48 +
  49 +
  50 + private float calculateUnit()
  51 + {
  52 + return (this.max - this.speed) / (DEFAULT_MAX - DEFAULT);
  53 + }
  54 +
  55 + /*
  56 + * Retorna velocidade em relação ao estado do slider.
  57 + * @param slider - estado do slider (valor entre "speed - max" e "max")
  58 + */
  59 + public float getProportional(float slider)
  60 + {
  61 + return this.speed + (slider - DEFAULT) * this.unit;
  62 + }
  63 +}
0 64 \ No newline at end of file
... ...
Assets/Scripts/DefaultSignSpeed.cs.meta 0 → 100644
... ... @@ -0,0 +1,12 @@
  1 +fileFormatVersion: 2
  2 +guid: 65beafb116ad9fe4fbf6eee8d0253b39
  3 +timeCreated: 1452687065
  4 +licenseType: Pro
  5 +MonoImporter:
  6 + serializedVersion: 2
  7 + defaultReferences: []
  8 + executionOrder: 0
  9 + icon: {instanceID: 0}
  10 + userData:
  11 + assetBundleName:
  12 + assetBundleVariant:
... ...
Assets/Scripts/GenericPlayerManager.cs
... ... @@ -6,82 +6,16 @@ using System;
6 6 using System.IO;
7 7 using System.Text;
8 8 using System.Runtime.InteropServices;
  9 +using System.Diagnostics;
9 10 using UnityEngine.UI;
10 11  
11 12 public abstract class GenericPlayerManager : MonoBehaviour {
12 13  
13   - private class AnimationReference
14   - {
15   - public string name;
16   - public string subtitle;
17   - public AnimationState state;
18   - public short type;
19   - public bool playing;
20   -
21   - public AnimationReference(string name, string subtitle, AnimationState state, short type)
22   - {
23   - this.name = name;
24   - this.subtitle = subtitle;
25   - this.state = state;
26   - this.type = type;
27   - this.playing = false;
28   - }
29   - }
30   -
31   - protected class DefaultSignSpeed
32   - {
33   - public static float DEFAULT = 1.1F;
34   - public static float DEFAULT_MAX = 2F;
35   -
36   - public float speed;
37   - public float max;
38   - // Relação entre a velocidade do tipo representado e a velocidade DEFAULT.
39   - public float unit;
40   -
41   - public DefaultSignSpeed()
42   - {
43   - this.speed = DEFAULT;
44   - this.max = DEFAULT_MAX;
45   - this.unit = 1F;
46   - }
47   -
48   - public DefaultSignSpeed(float defaultSpeed, float defaultMaxSpeed)
49   - {
50   - this.speed = defaultSpeed;
51   - this.max = defaultMaxSpeed;
52   - this.unit = (this.max - this.speed) / (DEFAULT_MAX - DEFAULT);
53   - }
54   -
55   - /*
56   - * Retorna velocidade em relação ao estado do slider.
57   - * @param slider - estado do slider (valor entre DefaultSignSpeed.DEFAULT e DefaultSignSpeed.DEFAULT_MAX)
58   - */
59   - public float getProporcionalSpeed(float slider)
60   - {
61   - return this.speed + (slider - DEFAULT) * this.unit;
62   - }
63   - }
64   -
65 14 private const string DEFAULT_ANIMATION = "_default";
66 15 private const string NONE_ANIMATION = "_defaultWORD";
67 16  
68 17 protected float fadeLength = 0.6F;
69 18  
70   - protected DefaultSignSpeed defaultWordSpeed = new DefaultSignSpeed();
71   - protected DefaultSignSpeed defaultFirstLetterSpeed = new DefaultSignSpeed(2.1F, 2.8F);
72   - protected DefaultSignSpeed defaultLetterSpeed = new DefaultSignSpeed(3F, 4.3F);
73   - protected DefaultSignSpeed defaultNumberSpeed = new DefaultSignSpeed(1.5F, 2.9F);
74   -
75   - private const short TYPE_NONE = -1;
76   - private const short TYPE_WORD = 0;
77   - private const short TYPE_LETTER = 1;
78   - private const short TYPE_NUMBER = 2;
79   -
80   - private float hSlidersecond = DefaultSignSpeed.DEFAULT;
81   - private float wordSpeed = DefaultSignSpeed.DEFAULT;
82   - private float letterSpeed = DefaultSignSpeed.DEFAULT;
83   - private float numberSpeed = DefaultSignSpeed.DEFAULT;
84   -
85 19 protected string glosa = "";
86 20 private static String[] stringPos = { DEFAULT_ANIMATION };//vetor que sera usado para quebrar a glosa
87 21  
... ... @@ -89,7 +23,7 @@ public abstract class GenericPlayerManager : MonoBehaviour {
89 23 private Animation COMPONENT_ANIMATION;
90 24 private BoxCollider AVATAR_COLLIDER;
91 25 public Text SUBTITLES;
92   -
  26 +
93 27 // Guarda os nomes das palavras ja carregadas.
94 28 private HashSet<string> loadedAssetBundles = new HashSet<string>();
95 29 // Guarda os nomes das palavras que nao tem assetbundle.
... ... @@ -104,15 +38,26 @@ public abstract class GenericPlayerManager : MonoBehaviour {
104 38 private volatile bool playing = false;
105 39 private volatile bool paused = false;
106 40  
  41 + private Stopwatch watch = new Stopwatch();
  42 + private string lastRandom = "";
  43 + private int repeated = 0;
  44 +
  45 + private Subtitle subtitle;
  46 +
107 47 public virtual void Start()
108 48 {
109   - wordSpeed = defaultWordSpeed.speed;
110   - letterSpeed = defaultLetterSpeed.speed;
111   - numberSpeed = defaultNumberSpeed.speed;
  49 + subtitle = new Subtitle(SUBTITLES);
  50 + subtitle.DefaultWordSpeed = new DefaultSignSpeed();
  51 + subtitle.DefaultFirstLetterSpeed = new DefaultSignSpeed(2.1F, 2.8F);
  52 + subtitle.DefaultLetterSpeed = new DefaultSignSpeed(3F, 4.3F);
  53 + subtitle.DefaultNumberSpeed = new DefaultSignSpeed(1.5F, 2.9F);
112 54  
113 55 AVATAR = GameObject.FindGameObjectWithTag("avatar");//referencia para o avatar
114 56 COMPONENT_ANIMATION = AVATAR.GetComponent<Animation>();//referencia para o componente animador do avatar
115 57 AVATAR_COLLIDER = GameObject.FindGameObjectWithTag("avatar").GetComponent<BoxCollider>();
  58 +
  59 + watch.Start();
  60 + Invoke("playRandomAnimation", 5);
116 61 }
117 62  
118 63 public bool isLoadingSingleAnimation() { return loadingSingleAnimation; }
... ... @@ -120,6 +65,46 @@ public abstract class GenericPlayerManager : MonoBehaviour {
120 65 public bool isPlaying() { return playing; }
121 66 public bool isPaused() { return paused; }
122 67  
  68 +
  69 + private void stopWatch() {
  70 + watch.Stop();
  71 + watch.Reset();
  72 + }
  73 +
  74 + private void continueWatch() {
  75 + watch.Start();
  76 + }
  77 +
  78 + private void playRandomAnimation(string glosa)
  79 + {
  80 + stopWatch();
  81 +
  82 + this.glosa = glosa;
  83 + this.play();
  84 + }
  85 +
  86 + private void playRandomAnimation()
  87 + {
  88 + if (watch.Elapsed.Seconds >= 1)
  89 + {
  90 + int rand = new System.Random().Next(3);
  91 +
  92 + switch (rand)
  93 + {
  94 + case 0: playRandomAnimation("[OLA]");
  95 + break;
  96 +
  97 + case 1: playRandomAnimation("[OI]");
  98 + break;
  99 +
  100 + case 2: playRandomAnimation("[IAE]");
  101 + break;
  102 + }
  103 + }
  104 +
  105 + Invoke("playRandomAnimation", 1);
  106 + }
  107 +
123 108 public void SetAvatarCollider(bool isActive)
124 109 {
125 110 AVATAR_COLLIDER.enabled = isActive;
... ... @@ -131,17 +116,16 @@ public abstract class GenericPlayerManager : MonoBehaviour {
131 116 }
132 117  
133 118 // Define a velocidade das animacões com base no slider da GUI
134   - public void setSlider(float x)
  119 + public void setSlider(float sliderPosition)
135 120 {
136   - hSlidersecond = x;
137   -
138   - wordSpeed = defaultWordSpeed.getProporcionalSpeed(x);
139   - letterSpeed = defaultLetterSpeed.getProporcionalSpeed(x);
140   - numberSpeed = defaultNumberSpeed.getProporcionalSpeed(x);
  121 + subtitle.SliderPosition = sliderPosition;
  122 + subtitle.updateWordSpeed();
  123 + subtitle.updateLetterSpeed();
  124 + subtitle.updateNumberSpeed();
141 125  
142 126 if ( ! paused)
143 127 foreach (AnimationReference reference in animQueue)
144   - if (reference.type != TYPE_NONE && reference.state != null)
  128 + if (reference.type != Subtitle.TYPE_NONE && reference.state != null)
145 129 reference.state.speed = getSpeedByType(reference.type);
146 130 }
147 131  
... ... @@ -149,9 +133,9 @@ public abstract class GenericPlayerManager : MonoBehaviour {
149 133 {
150 134 switch (type)
151 135 {
152   - case TYPE_WORD: return wordSpeed;
153   - case TYPE_LETTER: return letterSpeed;
154   - case TYPE_NUMBER: return numberSpeed;
  136 + case Subtitle.TYPE_WORD: return subtitle.WordSpeed;
  137 + case Subtitle.TYPE_LETTER: return subtitle.LetterSpeed;
  138 + case Subtitle.TYPE_NUMBER: return subtitle.NumberSpeed;
155 139 }
156 140  
157 141 return 2F;
... ... @@ -174,13 +158,13 @@ public abstract class GenericPlayerManager : MonoBehaviour {
174 158 {
175 159 try {
176 160 StopCoroutine("handleStates");
177   - } catch (NullReferenceException nre) { Debug.Log("StopCoroutine handlestates nullreff::"+nre.ToString()); }
  161 + } catch (NullReferenceException nre) { UnityEngine.Debug.Log("StopCoroutine handlestates nullreff::"+nre.ToString()); }
178 162  
179 163 setSubtitle("");
180 164  
181 165 try {
182 166 animQueue.Clear();
183   - } catch (NullReferenceException nre) { Debug.Log("SetQueueList null reff::"+nre.ToString()); }
  167 + } catch (NullReferenceException nre) { UnityEngine.Debug.Log("SetQueueList null reff::"+nre.ToString()); }
184 168  
185 169 COMPONENT_ANIMATION.Stop();
186 170 COMPONENT_ANIMATION.CrossFade(DEFAULT_ANIMATION, fadeLength, PlayMode.StopAll);
... ... @@ -188,10 +172,6 @@ public abstract class GenericPlayerManager : MonoBehaviour {
188 172  
189 173 /*
190 174 * Manda reproduzir animação e adiciona a file de animações a serem reproduzidas.
191   - *
192   - * Caso não haja SUBTITLE, name será utilizado como SUBTITLE.
193   - * Caso não haja fadeLength, será atribuido fadeLength.
194   - * Caso não haja velocidade, hSlidersecond será atribuída.
195 175 */
196 176 private AnimationState playAnimation(short type, string name, string subtitle, float speed)
197 177 {
... ... @@ -205,7 +185,7 @@ public abstract class GenericPlayerManager : MonoBehaviour {
205 185 }
206 186 catch (NullReferenceException nre)
207 187 {
208   - Debug.Log("'" + name + "' não foi encontrado!\n" + nre.ToString());
  188 + UnityEngine.Debug.Log("'" + name + "' não foi encontrado!\n" + nre.ToString());
209 189 }
210 190  
211 191 return null;
... ... @@ -285,40 +265,6 @@ public abstract class GenericPlayerManager : MonoBehaviour {
285 265 return true;
286 266 }
287 267  
288   -
289   - /*
290   - * Destaca caractere de uma string.
291   - */
292   - private string highlight(string word, int index)
293   - {
294   - string subtitle = "";
295   - int last = 0;
296   -
297   - if (index == 0)
298   - subtitle += "<b><color=white>" + word[0] + "</color></b>";
299   - else
300   - subtitle += word[0];
301   -
302   - for (int i = 1; i < word.Length; i++)
303   - {
304   - if ((word[i] >= 65 && word[i] <= 90) || (word[i] >= 48 && word[i] <= 57))
305   - subtitle += "-";
306   -
307   - if (i == index || (last == index && word[i] == word[last]))
308   - {
309   - subtitle += "<b><color=white>" + word[i] + "</color></b>";
310   - if (i == index) last = i;
311   - }
312   - else
313   - {
314   - subtitle += word[i];
315   - last = i;
316   - }
317   - }
318   -
319   - return subtitle;
320   - }
321   -
322 268 /**
323 269 * Spells word.
324 270 *
... ... @@ -330,24 +276,24 @@ public abstract class GenericPlayerManager : MonoBehaviour {
330 276 bool defaultPlayed = false;
331 277  
332 278 // A reprodução da primeira letra deve ser longa para não ser cortada no fade
333   - letterSpeed = defaultLetterSpeed.getProporcionalSpeed(hSlidersecond);
  279 + subtitle.updateLetterSpeed();
334 280  
335 281 for (int i = 0; i < word.Length; i++)
336 282 {
337 283 char second = word[i];
338   - lastAnimationSubtitle = highlight(word, i);
  284 + lastAnimationSubtitle = Subtitle.highlight(word, i);
339 285  
340 286 // Se for uma letra
341 287 if (second >= 65 && second <= 90)
342   - playAnimation(TYPE_LETTER, second.ToString(), lastAnimationSubtitle, letterSpeed);
  288 + playAnimation(Subtitle.TYPE_LETTER, second.ToString(), lastAnimationSubtitle, subtitle.LetterSpeed);
343 289  
344 290 // Se for um número
345 291 else if (second >= 48 && second <= 57)
346   - playAnimation(TYPE_NUMBER, second.ToString(), lastAnimationSubtitle, numberSpeed);
  292 + playAnimation(Subtitle.TYPE_NUMBER, second.ToString(), lastAnimationSubtitle, subtitle.NumberSpeed);
347 293  
348 294 // Se for uma vírgula
349 295 else if (second == 44)
350   - playAnimation(TYPE_WORD, second.ToString(), lastAnimationSubtitle);
  296 + playAnimation(Subtitle.TYPE_WORD, second.ToString(), lastAnimationSubtitle);
351 297  
352 298 // Não há animação
353 299 else
... ... @@ -356,18 +302,18 @@ public abstract class GenericPlayerManager : MonoBehaviour {
356 302 if ( ! defaultPlayed)
357 303 {
358 304 defaultPlayed = true;
359   - playAnimation(TYPE_NONE, DEFAULT_ANIMATION, lastAnimationSubtitle);
  305 + playAnimation(Subtitle.TYPE_NONE, DEFAULT_ANIMATION, lastAnimationSubtitle);
360 306  
361 307 // A reprodução da próxima letra deve ser longa para não ser cortada no fade
362   - letterSpeed = defaultLetterSpeed.getProporcionalSpeed(hSlidersecond);
  308 + subtitle.updateLetterSpeed();
363 309 }
364 310  
365   - Debug.Log("Animação \"" + second + "\" inexistente.");
  311 + UnityEngine.Debug.Log("Animação \"" + second + "\" inexistente.");
366 312 continue;
367 313 }
368 314  
369 315 defaultPlayed = false;
370   - letterSpeed = defaultLetterSpeed.getProporcionalSpeed(hSlidersecond);
  316 + subtitle.updateLetterSpeed();
371 317 }
372 318  
373 319 return lastAnimationSubtitle;
... ... @@ -403,7 +349,7 @@ public abstract class GenericPlayerManager : MonoBehaviour {
403 349 loadedAssetBundles.Add(name);
404 350 yield break;
405 351 }
406   - else Debug.Log ("Sinal \"" + name + "\" não carregado corretamente.");
  352 + else UnityEngine.Debug.Log ("Sinal \"" + name + "\" não carregado corretamente.");
407 353 }
408 354 }
409 355  
... ... @@ -414,6 +360,16 @@ public abstract class GenericPlayerManager : MonoBehaviour {
414 360 }
415 361  
416 362  
  363 + private bool isFlag(string animationName)
  364 + {
  365 + return animationName.Equals("[PONTO]")
  366 + || animationName.Equals("[INTERROGACAO]")
  367 + || animationName.Equals("[EXCLAMACAO]")
  368 + || animationName.Equals("[OLA]")
  369 + || animationName.Equals("[OI]")
  370 + || animationName.Equals("[IAE]");
  371 + }
  372 +
417 373 private IEnumerator loadAndPlay()
418 374 {
419 375 loading = true;
... ... @@ -423,7 +379,7 @@ public abstract class GenericPlayerManager : MonoBehaviour {
423 379 bool spelled = false;
424 380  
425 381 // Default
426   - playAnimation(TYPE_NONE, DEFAULT_ANIMATION, "", 2F);
  382 + playAnimation(Subtitle.TYPE_NONE, DEFAULT_ANIMATION, "", 2F);
427 383  
428 384 if ( ! playing)
429 385 {
... ... @@ -438,7 +394,7 @@ public abstract class GenericPlayerManager : MonoBehaviour {
438 394 try {
439 395 if (String.IsNullOrEmpty(aniName)) continue;
440 396 } catch (Exception e) {
441   - Debug.Log(e + " :: NotNullNotEmpty");
  397 + UnityEngine.Debug.Log(e + " :: NotNullNotEmpty");
442 398 }
443 399  
444 400 bool nonexistent = nonexistentAssetBundles.Contains(aniName);
... ... @@ -470,7 +426,7 @@ public abstract class GenericPlayerManager : MonoBehaviour {
470 426 loadedAssetBundles.Add(aniName);
471 427 loaded = true;
472 428 }
473   - else Debug.Log ("Sinal \"" + aniName + "\" não carregado corretamente.");
  429 + else UnityEngine.Debug.Log ("Sinal \"" + aniName + "\" não carregado corretamente.");
474 430 }
475 431 }
476 432 }
... ... @@ -481,41 +437,31 @@ public abstract class GenericPlayerManager : MonoBehaviour {
481 437 if (spelled)
482 438 {
483 439 // Default
484   - playAnimation(TYPE_NONE, DEFAULT_ANIMATION, lastAnimationSubtitle);
  440 + playAnimation(Subtitle.TYPE_NONE, DEFAULT_ANIMATION, lastAnimationSubtitle);
485 441 spelled = false;
486 442 }
487 443  
488   - bool isPunctuation = false;
  444 + //bool isFlag = false;
489 445  
490   - if (aniName[0] == '[')
491   - {
492   - if (aniName.Equals("[PONTO]"))
  446 + //if (aniName[0] == '[')
  447 + //{
  448 + if (isFlag(aniName))
493 449 {
494   - isPunctuation = true;
495   - lastAnimationSubtitle = ".";
496   - }
497   -
498   - else if (aniName.Equals("[INTERROGACAO]"))
499   - {
500   - isPunctuation = true;
501   - lastAnimationSubtitle = "?";
502   - }
503   -
504   - else if (aniName.Equals("[EXCLAMACAO]"))
505   - {
506   - isPunctuation = true;
507   - lastAnimationSubtitle = "!";
  450 + //isFlag = true;
  451 + lastAnimationSubtitle = "";
  452 + playAnimation(Subtitle.TYPE_WORD, aniName, "");
508 453 }
509 454 else
510 455 {
511 456 lastAnimationSubtitle = aniName;
  457 + playAnimation(Subtitle.TYPE_WORD, aniName);
512 458 }
513   - }
  459 + //}
514 460  
515   - if (isPunctuation)
516   - playAnimation(TYPE_WORD, aniName, lastAnimationSubtitle);
  461 + /*if (isFlag)
  462 + playAnimation(Subtitle.TYPE_WORD, aniName, "");
517 463 else
518   - playAnimation(TYPE_WORD, aniName);
  464 + playAnimation(Subtitle.TYPE_WORD, aniName);*/
519 465 }
520 466 // Soletra palavra
521 467 else
... ... @@ -525,17 +471,17 @@ public abstract class GenericPlayerManager : MonoBehaviour {
525 471 if ( ! nonexistent)
526 472 nonexistentAssetBundles.Add(aniName);
527 473  
528   - Debug.Log("~~ To spell: " + aniName);
  474 + UnityEngine.Debug.Log("~~ To spell: " + aniName);
529 475  
530   - if (aniName.Equals("[PONTO]") || aniName.Equals("[INTERROGACAO]") || aniName.Equals("[EXCLAMACAO]"))
  476 + if (isFlag(aniName))
531 477 {
532   - playAnimation(TYPE_NONE, DEFAULT_ANIMATION, "", 1.6F);
  478 + playAnimation(Subtitle.TYPE_NONE, DEFAULT_ANIMATION, "", 1.6F);
533 479 continue;
534 480 }
535 481  
536 482 // Se já houve o soletramento de alguma palavra, reproduz animação default
537 483 if (spelled)
538   - playAnimation(TYPE_NONE, DEFAULT_ANIMATION, lastAnimationSubtitle, 1.6F);
  484 + playAnimation(Subtitle.TYPE_NONE, DEFAULT_ANIMATION, lastAnimationSubtitle, 1.6F);
539 485 else
540 486 spelled = true;
541 487  
... ... @@ -544,7 +490,7 @@ public abstract class GenericPlayerManager : MonoBehaviour {
544 490 }
545 491  
546 492 // Default
547   - playAnimation(TYPE_NONE, DEFAULT_ANIMATION, lastAnimationSubtitle);
  493 + playAnimation(Subtitle.TYPE_NONE, DEFAULT_ANIMATION, "");
548 494  
549 495 loading = false;
550 496 onPlayingStateChange();
... ... @@ -557,6 +503,8 @@ public abstract class GenericPlayerManager : MonoBehaviour {
557 503 */
558 504 IEnumerator handleStates()
559 505 {
  506 + stopWatch();
  507 +
560 508 // Enquanto estiver executando a rotina "loadAndPlay"
561 509 // ou existir animações na fila de reprodução
562 510 while (loading || animQueue.Count > 0)
... ... @@ -586,6 +534,8 @@ public abstract class GenericPlayerManager : MonoBehaviour {
586 534 playing = false;
587 535 paused = false;
588 536 onPlayingStateChange();
  537 +
  538 + continueWatch();
589 539 }
590 540  
591 541 }
... ...
Assets/Scripts/Subtitle.cs 0 → 100644
... ... @@ -0,0 +1,134 @@
  1 +using UnityEngine.UI;
  2 +
  3 +public class Subtitle {
  4 +
  5 + public const short TYPE_NONE = -1;
  6 + public const short TYPE_WORD = 0;
  7 + public const short TYPE_LETTER = 1;
  8 + public const short TYPE_NUMBER = 2;
  9 +
  10 + protected DefaultSignSpeed defaultWordSpeed = new DefaultSignSpeed();
  11 + protected DefaultSignSpeed defaultFirstLetterSpeed = new DefaultSignSpeed();
  12 + protected DefaultSignSpeed defaultLetterSpeed = new DefaultSignSpeed();
  13 + protected DefaultSignSpeed defaultNumberSpeed = new DefaultSignSpeed();
  14 +
  15 + private float sliderPosition = DefaultSignSpeed.DEFAULT;
  16 +
  17 + private float wordSpeed = DefaultSignSpeed.DEFAULT;
  18 + private float letterSpeed = DefaultSignSpeed.DEFAULT;
  19 + private float numberSpeed = DefaultSignSpeed.DEFAULT;
  20 +
  21 + public Text SUBTITLES;
  22 +
  23 +
  24 + public Subtitle(Text subtitles)
  25 + {
  26 + this.SUBTITLES = subtitles;
  27 + }
  28 +
  29 + public DefaultSignSpeed DefaultWordSpeed {
  30 + get { return this.defaultWordSpeed; }
  31 + set {
  32 + this.defaultWordSpeed = value;
  33 + this.wordSpeed = value.Speed;
  34 + }
  35 + }
  36 +
  37 + public DefaultSignSpeed DefaultFirstLetterSpeed {
  38 + get { return this.defaultFirstLetterSpeed; }
  39 + set { this.defaultFirstLetterSpeed = value; }
  40 + }
  41 +
  42 + public DefaultSignSpeed DefaultLetterSpeed {
  43 + get { return this.defaultLetterSpeed; }
  44 + set {
  45 + this.defaultLetterSpeed = value;
  46 + this.letterSpeed = value.Speed;
  47 + }
  48 + }
  49 +
  50 + public DefaultSignSpeed DefaultNumberSpeed {
  51 + get { return this.defaultNumberSpeed; }
  52 + set {
  53 + this.defaultNumberSpeed = value;
  54 + this.numberSpeed = value.Speed;
  55 + }
  56 + }
  57 +
  58 + public float WordSpeed {
  59 + get { return this.wordSpeed; }
  60 + set { this.wordSpeed = value; }
  61 + }
  62 +
  63 + public float LetterSpeed {
  64 + get { return this.letterSpeed; }
  65 + set { this.letterSpeed = value; }
  66 + }
  67 +
  68 + public float NumberSpeed {
  69 + get { return this.numberSpeed; }
  70 + set { this.numberSpeed = value; }
  71 + }
  72 +
  73 + public float SliderPosition {
  74 + get { return this.sliderPosition; }
  75 + set { this.sliderPosition = value; }
  76 + }
  77 +
  78 +
  79 + public void updateWordSpeed(float sliderPosition) {
  80 + this.WordSpeed = this.DefaultWordSpeed.getProportional(sliderPosition);
  81 + }
  82 + public void updateWordSpeed() {
  83 + this.WordSpeed = this.DefaultWordSpeed.getProportional(this.SliderPosition);
  84 + }
  85 +
  86 + public void updateLetterSpeed(float sliderPosition) {
  87 + this.LetterSpeed = this.DefaultLetterSpeed.getProportional(sliderPosition);
  88 + }
  89 + public void updateLetterSpeed() {
  90 + this.LetterSpeed = this.DefaultLetterSpeed.getProportional(this.SliderPosition);
  91 + }
  92 +
  93 + public void updateNumberSpeed(float sliderPosition) {
  94 + this.NumberSpeed = this.DefaultNumberSpeed.getProportional(sliderPosition);
  95 + }
  96 + public void updateNumberSpeed() {
  97 + this.NumberSpeed = this.DefaultNumberSpeed.getProportional(this.SliderPosition);
  98 + }
  99 +
  100 +
  101 + /*
  102 + * Destaca caractere de uma string.
  103 + */
  104 + public static string highlight(string word, int index)
  105 + {
  106 + string subtitle = "";
  107 + int last = 0;
  108 +
  109 + if (index == 0)
  110 + subtitle += "<b><color=white>" + word[0] + "</color></b>";
  111 + else
  112 + subtitle += word[0];
  113 +
  114 + for (int i = 1; i < word.Length; i++)
  115 + {
  116 + if ((word[i] >= 65 && word[i] <= 90) || (word[i] >= 48 && word[i] <= 57))
  117 + subtitle += "-";
  118 +
  119 + if (i == index || (last == index && word[i] == word[last]))
  120 + {
  121 + subtitle += "<b><color=white>" + word[i] + "</color></b>";
  122 + if (i == index) last = i;
  123 + }
  124 + else
  125 + {
  126 + subtitle += word[i];
  127 + last = i;
  128 + }
  129 + }
  130 +
  131 + return subtitle;
  132 + }
  133 +
  134 +}
0 135 \ No newline at end of file
... ...
Assets/Scripts/Subtitle.cs.meta 0 → 100644
... ... @@ -0,0 +1,12 @@
  1 +fileFormatVersion: 2
  2 +guid: f97b63181c1ec5f488126f3f9fd68141
  3 +timeCreated: 1452687065
  4 +licenseType: Pro
  5 +MonoImporter:
  6 + serializedVersion: 2
  7 + defaultReferences: []
  8 + executionOrder: 0
  9 + icon: {instanceID: 0}
  10 + userData:
  11 + assetBundleName:
  12 + assetBundleVariant:
... ...