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) | ... | ... |