Commit 0bad1d7fcc31dd056ce9a2fbdb4938ad06982106
1 parent
d55acff5
Exists in
master
Correção de problema ao soletrar palavras com acento.
Showing
2 changed files
with
78 additions
and
25 deletions
Show diff stats
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) | ... | ... |