From 0bad1d7fcc31dd056ce9a2fbdb4938ad06982106 Mon Sep 17 00:00:00 2001 From: Mateus Pires Date: Tue, 29 Mar 2016 18:55:52 -0300 Subject: [PATCH] Correção de problema ao soletrar palavras com acento. --- Assets/Scripts/Player Manager/GenericPlayerManager.cs | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------ Assets/Scripts/Player Manager/Subtitle.cs | 26 +++++++++++++++++++++++++- 2 files changed, 78 insertions(+), 25 deletions(-) diff --git a/Assets/Scripts/Player Manager/GenericPlayerManager.cs b/Assets/Scripts/Player Manager/GenericPlayerManager.cs index 513a556..5bdfb0d 100644 --- a/Assets/Scripts/Player Manager/GenericPlayerManager.cs +++ b/Assets/Scripts/Player Manager/GenericPlayerManager.cs @@ -7,6 +7,10 @@ * Versão 2.2 * - Acompanhamento da legenda * Corrigido problema na soletração quando o estado muda para pausado. + * + * Versão 2.3 + * - Legenda + * A letras acentuadas reproduzem a mesma sem o acento */ //Log Dir http://docs.unity3d.com/Manual/LogFiles.html @@ -342,6 +346,24 @@ public abstract class GenericPlayerManager : MonoBehaviour { return animation; } + private static short getType(char c) + { + // Se for uma letra + if (c >= 65 && c <= 90) + return Subtitle.TYPE_LETTER; + + // Se for um número + else if (c >= 48 && c <= 57) + return Subtitle.TYPE_NUMBER; + + // Se for uma vírgula + else if (c == 44) + return Subtitle.TYPE_WORD; + + else + return Subtitle.TYPE_NONE; + } + /* Enfileira soletração de palavra */ private string spellWord(Queue toPlayQueue, string word) { @@ -350,50 +372,57 @@ public abstract class GenericPlayerManager : MonoBehaviour { // A reprodução da primeira letra deve ser longa para não ser cortada no fade this.subtitles.updateLetterSpeed(); - - string lastAnim = ""; for (int i = 0; i < word.Length; i++) { lastAnimationSubtitle = Subtitle.highlight(word, i); - lastAnim = nextLetterAnimation(word[i]); - //anim.Equals(lastAnim) ? "d_" + anim : anim; + char anim = word[i]; - short type; - - // Se for uma letra - if (word[i] >= 65 && word[i] <= 90) - type = Subtitle.TYPE_LETTER; - - // Se for um número - else if (word[i] >= 48 && word[i] <= 57) - type = Subtitle.TYPE_NUMBER; + switch (word[i]) + { + case 'Á': + case 'Â': + case 'À': + case 'Ã': anim = 'A'; + break; + case 'É': + case 'Ê': anim = 'E'; + break; + case 'Í': anim = 'I'; + break; + case 'Ó': + case 'Ô': + case 'Õ': anim = 'O'; + break; + case 'Ú': anim = 'U'; + break; + } - // Se for uma vírgula - else if (word[i] == 44) - type = Subtitle.TYPE_WORD; + short type = getType(anim); + string animName = nextLetterAnimation(anim); // Não há animação - else + if (type == Subtitle.TYPE_NONE) { // Reproduz animação default apenas uma vez if ( ! defaultPlayed) { defaultPlayed = true; - toPlayQueue.Enqueue(new ToPlay(Subtitle.TYPE_NONE, DEFAULT_ANIMATION_MIDDLE, lastAnimationSubtitle, this)); + toPlayQueue.Enqueue(new ToPlay(Subtitle.TYPE_WORD, DEFAULT_ANIMATION_MIDDLE, lastAnimationSubtitle, this)); // A reprodução da próxima letra deve ser longa para não ser cortada no fade this.subtitles.updateLetterSpeed(); } - UnityEngine.Debug.Log("Animação \"" + word[i] + "\" inexistente."); - continue; + UnityEngine.Debug.Log("Animação \"" + animName + "\" inexistente."); } - - toPlayQueue.Enqueue(new ToPlay(type, lastAnim, lastAnimationSubtitle, this)); + else + { + toPlayQueue.Enqueue(new ToPlay(type, animName, lastAnimationSubtitle, this)); - defaultPlayed = false; - this.subtitles.updateLetterSpeed(); + defaultPlayed = false; + this.subtitles.updateLetterSpeed(); + } } return lastAnimationSubtitle; diff --git a/Assets/Scripts/Player Manager/Subtitle.cs b/Assets/Scripts/Player Manager/Subtitle.cs index 4942a78..16449a8 100644 --- a/Assets/Scripts/Player Manager/Subtitle.cs +++ b/Assets/Scripts/Player Manager/Subtitle.cs @@ -2,6 +2,9 @@ using UnityEngine.UI; /** * Gerenciador de legendas + * + * Versão 1.1 + * - Caracteres de letras acentuadas e % são separados com "-". */ public class Subtitle { @@ -116,6 +119,27 @@ public class Subtitle { this.NumberSpeed = this.DefaultNumberSpeed.getProportional(this.SliderPosition); } + public static bool isSeparable(char c) + { + switch (c) + { + case '%': + case 'Á': + case 'Â': + case 'À': + case 'Ã': + case 'É': + case 'Ê': + case 'Í': + case 'Ó': + case 'Ô': + case 'Õ': + case 'Ú': return true; + } + + return (c >= 65 && c <= 90) || (c >= 48 && c <= 57); + } + /* Destaca caractere de uma string. */ public static string highlight(string word, int index) { @@ -123,7 +147,7 @@ public class Subtitle { for (int i = 0; i < word.Length; i++) { - if (i > 0 && ((word[i] >= 65 && word[i] <= 90) || (word[i] >= 48 && word[i] <= 57))) + if (i > 0 && isSeparable(word[i])) subtitle += "-"; if (i == index) -- libgit2 0.21.2