Commit 0bad1d7fcc31dd056ce9a2fbdb4938ad06982106

Authored by Mateus Lustosa
1 parent d55acff5
Exists in master

Correção de problema ao soletrar palavras com acento.

Assets/Scripts/Player Manager/GenericPlayerManager.cs
... ... @@ -7,6 +7,10 @@
7 7 * Versão 2.2
8 8 * - Acompanhamento da legenda
9 9 * Corrigido problema na soletração quando o estado muda para pausado.
  10 + *
  11 + * Versão 2.3
  12 + * - Legenda
  13 + * A letras acentuadas reproduzem a mesma sem o acento
10 14 */
11 15  
12 16 //Log Dir http://docs.unity3d.com/Manual/LogFiles.html
... ... @@ -342,6 +346,24 @@ public abstract class GenericPlayerManager : MonoBehaviour {
342 346 return animation;
343 347 }
344 348  
  349 + private static short getType(char c)
  350 + {
  351 + // Se for uma letra
  352 + if (c >= 65 && c <= 90)
  353 + return Subtitle.TYPE_LETTER;
  354 +
  355 + // Se for um número
  356 + else if (c >= 48 && c <= 57)
  357 + return Subtitle.TYPE_NUMBER;
  358 +
  359 + // Se for uma vírgula
  360 + else if (c == 44)
  361 + return Subtitle.TYPE_WORD;
  362 +
  363 + else
  364 + return Subtitle.TYPE_NONE;
  365 + }
  366 +
345 367 /* Enfileira soletração de palavra */
346 368 private string spellWord(Queue<ToPlay> toPlayQueue, string word)
347 369 {
... ... @@ -350,50 +372,57 @@ public abstract class GenericPlayerManager : MonoBehaviour {
350 372  
351 373 // A reprodução da primeira letra deve ser longa para não ser cortada no fade
352 374 this.subtitles.updateLetterSpeed();
353   -
354   - string lastAnim = "";
355 375  
356 376 for (int i = 0; i < word.Length; i++)
357 377 {
358 378 lastAnimationSubtitle = Subtitle.highlight(word, i);
359   - lastAnim = nextLetterAnimation(word[i]);
360   - //anim.Equals(lastAnim) ? "d_" + anim : anim;
  379 + char anim = word[i];
361 380  
362   - short type;
363   -
364   - // Se for uma letra
365   - if (word[i] >= 65 && word[i] <= 90)
366   - type = Subtitle.TYPE_LETTER;
367   -
368   - // Se for um número
369   - else if (word[i] >= 48 && word[i] <= 57)
370   - type = Subtitle.TYPE_NUMBER;
  381 + switch (word[i])
  382 + {
  383 + case 'Á':
  384 + case 'Â':
  385 + case 'À':
  386 + case 'Ã': anim = 'A';
  387 + break;
  388 + case 'É':
  389 + case 'Ê': anim = 'E';
  390 + break;
  391 + case 'Í': anim = 'I';
  392 + break;
  393 + case 'Ó':
  394 + case 'Ô':
  395 + case 'Õ': anim = 'O';
  396 + break;
  397 + case 'Ú': anim = 'U';
  398 + break;
  399 + }
371 400  
372   - // Se for uma vírgula
373   - else if (word[i] == 44)
374   - type = Subtitle.TYPE_WORD;
  401 + short type = getType(anim);
  402 + string animName = nextLetterAnimation(anim);
375 403  
376 404 // Não há animação
377   - else
  405 + if (type == Subtitle.TYPE_NONE)
378 406 {
379 407 // Reproduz animação default apenas uma vez
380 408 if ( ! defaultPlayed)
381 409 {
382 410 defaultPlayed = true;
383   - toPlayQueue.Enqueue(new ToPlay(Subtitle.TYPE_NONE, DEFAULT_ANIMATION_MIDDLE, lastAnimationSubtitle, this));
  411 + toPlayQueue.Enqueue(new ToPlay(Subtitle.TYPE_WORD, DEFAULT_ANIMATION_MIDDLE, lastAnimationSubtitle, this));
384 412  
385 413 // A reprodução da próxima letra deve ser longa para não ser cortada no fade
386 414 this.subtitles.updateLetterSpeed();
387 415 }
388 416  
389   - UnityEngine.Debug.Log("Animação \"" + word[i] + "\" inexistente.");
390   - continue;
  417 + UnityEngine.Debug.Log("Animação \"" + animName + "\" inexistente.");
391 418 }
392   -
393   - toPlayQueue.Enqueue(new ToPlay(type, lastAnim, lastAnimationSubtitle, this));
  419 + else
  420 + {
  421 + toPlayQueue.Enqueue(new ToPlay(type, animName, lastAnimationSubtitle, this));
394 422  
395   - defaultPlayed = false;
396   - this.subtitles.updateLetterSpeed();
  423 + defaultPlayed = false;
  424 + this.subtitles.updateLetterSpeed();
  425 + }
397 426 }
398 427  
399 428 return lastAnimationSubtitle;
... ...
Assets/Scripts/Player Manager/Subtitle.cs
... ... @@ -2,6 +2,9 @@ using UnityEngine.UI;
2 2  
3 3 /**
4 4 * Gerenciador de legendas
  5 + *
  6 + * Versão 1.1
  7 + * - Caracteres de letras acentuadas e % são separados com "-".
5 8 */
6 9 public class Subtitle {
7 10  
... ... @@ -116,6 +119,27 @@ public class Subtitle {
116 119 this.NumberSpeed = this.DefaultNumberSpeed.getProportional(this.SliderPosition);
117 120 }
118 121  
  122 + public static bool isSeparable(char c)
  123 + {
  124 + switch (c)
  125 + {
  126 + case '%':
  127 + case 'Á':
  128 + case 'Â':
  129 + case 'À':
  130 + case 'Ã':
  131 + case 'É':
  132 + case 'Ê':
  133 + case 'Í':
  134 + case 'Ó':
  135 + case 'Ô':
  136 + case 'Õ':
  137 + case 'Ú': return true;
  138 + }
  139 +
  140 + return (c >= 65 && c <= 90) || (c >= 48 && c <= 57);
  141 + }
  142 +
119 143 /* Destaca caractere de uma string. */
120 144 public static string highlight(string word, int index)
121 145 {
... ... @@ -123,7 +147,7 @@ public class Subtitle {
123 147  
124 148 for (int i = 0; i < word.Length; i++)
125 149 {
126   - if (i > 0 && ((word[i] >= 65 && word[i] <= 90) || (word[i] >= 48 && word[i] <= 57)))
  150 + if (i > 0 && isSeparable(word[i]))
127 151 subtitle += "-";
128 152  
129 153 if (i == index)
... ...