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,6 +7,10 @@
7 * Versão 2.2 7 * Versão 2.2
8 * - Acompanhamento da legenda 8 * - Acompanhamento da legenda
9 * Corrigido problema na soletração quando o estado muda para pausado. 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 //Log Dir http://docs.unity3d.com/Manual/LogFiles.html 16 //Log Dir http://docs.unity3d.com/Manual/LogFiles.html
@@ -342,6 +346,24 @@ public abstract class GenericPlayerManager : MonoBehaviour { @@ -342,6 +346,24 @@ public abstract class GenericPlayerManager : MonoBehaviour {
342 return animation; 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 /* Enfileira soletração de palavra */ 367 /* Enfileira soletração de palavra */
346 private string spellWord(Queue<ToPlay> toPlayQueue, string word) 368 private string spellWord(Queue<ToPlay> toPlayQueue, string word)
347 { 369 {
@@ -350,50 +372,57 @@ public abstract class GenericPlayerManager : MonoBehaviour { @@ -350,50 +372,57 @@ public abstract class GenericPlayerManager : MonoBehaviour {
350 372
351 // A reprodução da primeira letra deve ser longa para não ser cortada no fade 373 // A reprodução da primeira letra deve ser longa para não ser cortada no fade
352 this.subtitles.updateLetterSpeed(); 374 this.subtitles.updateLetterSpeed();
353 -  
354 - string lastAnim = "";  
355 375
356 for (int i = 0; i < word.Length; i++) 376 for (int i = 0; i < word.Length; i++)
357 { 377 {
358 lastAnimationSubtitle = Subtitle.highlight(word, i); 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 // Não há animação 404 // Não há animação
377 - else 405 + if (type == Subtitle.TYPE_NONE)
378 { 406 {
379 // Reproduz animação default apenas uma vez 407 // Reproduz animação default apenas uma vez
380 if ( ! defaultPlayed) 408 if ( ! defaultPlayed)
381 { 409 {
382 defaultPlayed = true; 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 // A reprodução da próxima letra deve ser longa para não ser cortada no fade 413 // A reprodução da próxima letra deve ser longa para não ser cortada no fade
386 this.subtitles.updateLetterSpeed(); 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 return lastAnimationSubtitle; 428 return lastAnimationSubtitle;
Assets/Scripts/Player Manager/Subtitle.cs
@@ -2,6 +2,9 @@ using UnityEngine.UI; @@ -2,6 +2,9 @@ using UnityEngine.UI;
2 2
3 /** 3 /**
4 * Gerenciador de legendas 4 * Gerenciador de legendas
  5 + *
  6 + * Versão 1.1
  7 + * - Caracteres de letras acentuadas e % são separados com "-".
5 */ 8 */
6 public class Subtitle { 9 public class Subtitle {
7 10
@@ -116,6 +119,27 @@ public class Subtitle { @@ -116,6 +119,27 @@ public class Subtitle {
116 this.NumberSpeed = this.DefaultNumberSpeed.getProportional(this.SliderPosition); 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 /* Destaca caractere de uma string. */ 143 /* Destaca caractere de uma string. */
120 public static string highlight(string word, int index) 144 public static string highlight(string word, int index)
121 { 145 {
@@ -123,7 +147,7 @@ public class Subtitle { @@ -123,7 +147,7 @@ public class Subtitle {
123 147
124 for (int i = 0; i < word.Length; i++) 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 subtitle += "-"; 151 subtitle += "-";
128 152
129 if (i == index) 153 if (i == index)