Commit 664858267bf3a7f59b0dbf785639fb12d7fac33f
1 parent
f1f0ce68
Exists in
master
and in
1 other branch
Nova implementacao do GenericPlayerManager
Showing
9 changed files
with
227 additions
and
108 deletions
Show diff stats
No preview for this file type
No preview for this file type
Assets/Scenes/Scene.unity
| ... | ... | @@ -37,9 +37,6 @@ RenderSettings: |
| 37 | 37 | m_ReflectionIntensity: 1 |
| 38 | 38 | m_CustomReflection: {fileID: 0} |
| 39 | 39 | m_Sun: {fileID: 0} |
| 40 | ---- !u!127 &3 | |
| 41 | -LevelGameManager: | |
| 42 | - m_ObjectHideFlags: 0 | |
| 43 | 40 | --- !u!157 &4 |
| 44 | 41 | LightmapSettings: |
| 45 | 42 | m_ObjectHideFlags: 0 |
| ... | ... | @@ -68,6 +65,7 @@ LightmapSettings: |
| 68 | 65 | m_TextureCompression: 0 |
| 69 | 66 | m_FinalGather: 0 |
| 70 | 67 | m_FinalGatherRayCount: 1024 |
| 68 | + m_ReflectionCompression: 2 | |
| 71 | 69 | m_LightmapSnapshot: {fileID: 0} |
| 72 | 70 | m_RuntimeCPUUsage: 25 |
| 73 | 71 | --- !u!196 &5 | ... | ... |
| ... | ... | @@ -0,0 +1,12 @@ |
| 1 | +fileFormatVersion: 2 | |
| 2 | +guid: 789d1dce6607a394b82bcaa4af8d1c46 | |
| 3 | +timeCreated: 1448041534 | |
| 4 | +licenseType: Pro | |
| 5 | +MonoImporter: | |
| 6 | + serializedVersion: 2 | |
| 7 | + defaultReferences: [] | |
| 8 | + executionOrder: 0 | |
| 9 | + icon: {instanceID: 0} | |
| 10 | + userData: | |
| 11 | + assetBundleName: | |
| 12 | + assetBundleVariant: | ... | ... |
Assets/Scripts/GenericPlayerManager.cs
| ... | ... | @@ -10,11 +10,13 @@ using UnityEngine.UI; |
| 10 | 10 | |
| 11 | 11 | public abstract class GenericPlayerManager : MonoBehaviour { |
| 12 | 12 | |
| 13 | - private struct AnimationReference { | |
| 13 | + private class AnimationReference | |
| 14 | + { | |
| 14 | 15 | public string name; |
| 15 | 16 | public string subtitle; |
| 16 | 17 | public AnimationState state; |
| 17 | 18 | public short type; |
| 19 | + public bool playing; | |
| 18 | 20 | |
| 19 | 21 | public AnimationReference(string name, string subtitle, AnimationState state, short type) |
| 20 | 22 | { |
| ... | ... | @@ -22,53 +24,70 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 22 | 24 | this.subtitle = subtitle; |
| 23 | 25 | this.state = state; |
| 24 | 26 | this.type = type; |
| 27 | + this.playing = false; | |
| 28 | + } | |
| 29 | + } | |
| 30 | + | |
| 31 | + protected class DefaultSignSpeed | |
| 32 | + { | |
| 33 | + public static float DEFAULT = 1.1F; | |
| 34 | + public static float DEFAULT_MAX = 2F; | |
| 35 | + | |
| 36 | + public float speed; | |
| 37 | + public float max; | |
| 38 | + // Relação entre a velocidade do tipo representado e a velocidade DEFAULT. | |
| 39 | + public float unit; | |
| 40 | + | |
| 41 | + public DefaultSignSpeed() | |
| 42 | + { | |
| 43 | + this.speed = DEFAULT; | |
| 44 | + this.max = DEFAULT_MAX; | |
| 45 | + this.unit = 1F; | |
| 46 | + } | |
| 47 | + | |
| 48 | + public DefaultSignSpeed(float defaultSpeed, float defaultMaxSpeed) | |
| 49 | + { | |
| 50 | + this.speed = defaultSpeed; | |
| 51 | + this.max = defaultMaxSpeed; | |
| 52 | + this.unit = (this.max - this.speed) / (DEFAULT_MAX - DEFAULT); | |
| 25 | 53 | } |
| 26 | 54 | |
| 55 | + /* | |
| 56 | + * Retorna velocidade em relação ao estado do slider. | |
| 57 | + * @param slider - estado do slider (valor entre DefaultSignSpeed.DEFAULT e DefaultSignSpeed.DEFAULT_MAX) | |
| 58 | + */ | |
| 59 | + public float getProporcionalSpeed(float slider) | |
| 60 | + { | |
| 61 | + return this.speed + (slider - DEFAULT) * this.unit; | |
| 62 | + } | |
| 27 | 63 | } |
| 28 | 64 | |
| 29 | 65 | private const string DEFAULT_ANIMATION = "_default"; |
| 30 | 66 | private const string NONE_ANIMATION = "_defaultWORD"; |
| 31 | 67 | |
| 32 | - private const float FADE_LENGTH = 0.6F; | |
| 33 | - | |
| 34 | - private const float WORD_DEFAULT_SPEED = 1.1F; | |
| 35 | - private const float WORD_MAX_SPEED = 2F; | |
| 36 | - | |
| 37 | - // Velocidade da primeira letra de uma palavra | |
| 38 | - private const float LETTER_FIRST_SPEED = 1.8F; | |
| 39 | - // Velocidade máxima de uma letra que o slider pode configurar | |
| 40 | - private const float LETTER_FIRST_MAX_SPEED = 2.8F; | |
| 41 | - // Taxa de velocidade da primeira letra de uma palavra equivalente a velocidade de uma palavra | |
| 42 | - private const float LETTER_FIRST_UNIT_SPEED = (LETTER_FIRST_MAX_SPEED - LETTER_FIRST_SPEED) / (WORD_MAX_SPEED - WORD_DEFAULT_SPEED); | |
| 43 | - // Velocidade das outras letras | |
| 44 | - private const float LETTER_DEFAULT_SPEED = 2.8F; | |
| 45 | - // Velocidade máxima de uma letra que o slider pode configurar | |
| 46 | - private const float LETTER_MAX_SPEED = 4.3F; | |
| 47 | - // Taxa de velocidade das outras letras equivalente a velocidade de uma palavra | |
| 48 | - private const float LETTER_UNIT_SPEED = (LETTER_MAX_SPEED - LETTER_DEFAULT_SPEED) / (WORD_MAX_SPEED - WORD_DEFAULT_SPEED); | |
| 49 | - | |
| 50 | - // Velocidade de reprodução de números | |
| 51 | - private const float NUMBER_DEFAULT_SPEED = 1.5F; | |
| 52 | - // Velocidade máxima de um número que o slider pode configurar | |
| 53 | - private const float NUMBER_MAX_SPEED = 2.9F; | |
| 54 | - // Taxa de velocidade equivalente a uma unidade de velocidade de uma palavra | |
| 55 | - private const float NUMBER_UNIT_SPEED = (NUMBER_MAX_SPEED - NUMBER_DEFAULT_SPEED) / (WORD_MAX_SPEED - WORD_DEFAULT_SPEED); | |
| 68 | + protected float fadeLength = 0.6F; | |
| 69 | + | |
| 70 | + protected DefaultSignSpeed defaultWordSpeed = new DefaultSignSpeed(); | |
| 71 | + protected DefaultSignSpeed defaultFirstLetterSpeed = new DefaultSignSpeed(2.1F, 2.8F); | |
| 72 | + protected DefaultSignSpeed defaultLetterSpeed = new DefaultSignSpeed(3F, 4.3F); | |
| 73 | + protected DefaultSignSpeed defaultNumberSpeed = new DefaultSignSpeed(1.5F, 2.9F); | |
| 56 | 74 | |
| 57 | 75 | private const short TYPE_NONE = -1; |
| 58 | 76 | private const short TYPE_WORD = 0; |
| 59 | 77 | private const short TYPE_LETTER = 1; |
| 60 | 78 | private const short TYPE_NUMBER = 2; |
| 61 | 79 | |
| 62 | - private static float hSlidersecond = WORD_DEFAULT_SPEED; | |
| 63 | - private float letterSpeed = LETTER_DEFAULT_SPEED; | |
| 64 | - private float numberSpeed = NUMBER_DEFAULT_SPEED; | |
| 80 | + private float hSlidersecond = DefaultSignSpeed.DEFAULT; | |
| 81 | + private float wordSpeed = DefaultSignSpeed.DEFAULT; | |
| 82 | + private float letterSpeed = DefaultSignSpeed.DEFAULT; | |
| 83 | + private float numberSpeed = DefaultSignSpeed.DEFAULT; | |
| 65 | 84 | |
| 66 | 85 | protected string glosa = ""; |
| 67 | 86 | private static String[] stringPos = { DEFAULT_ANIMATION };//vetor que sera usado para quebrar a glosa |
| 68 | 87 | |
| 69 | - public GameObject AVATAR; | |
| 88 | + private GameObject AVATAR; | |
| 70 | 89 | private Animation COMPONENT_ANIMATION; |
| 71 | - private BoxCollider COMPONENT_COLLIDER; | |
| 90 | + private BoxCollider AVATAR_COLLIDER; | |
| 72 | 91 | public Text SUBTITLES; |
| 73 | 92 | |
| 74 | 93 | // Guarda os nomes das palavras ja carregadas. |
| ... | ... | @@ -80,21 +99,30 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 80 | 99 | // Utilizada para alterar velocidade e apresentar a legenda. |
| 81 | 100 | private volatile Queue<AnimationReference> animQueue = new Queue<AnimationReference>(); |
| 82 | 101 | |
| 83 | - // "play" flag. Indica se está carregando a glosa. | |
| 102 | + private volatile bool loadingSingleAnimation = false; | |
| 84 | 103 | private volatile bool loading = false; |
| 85 | - | |
| 86 | - protected bool playing = false; | |
| 87 | - protected bool paused = false; | |
| 104 | + private volatile bool playing = false; | |
| 105 | + private volatile bool paused = false; | |
| 88 | 106 | |
| 89 | 107 | public virtual void Start() |
| 90 | 108 | { |
| 91 | - //Gets Animation Component reference from AVATAR | |
| 92 | - COMPONENT_ANIMATION = AVATAR.GetComponent<Animation>(); | |
| 93 | - COMPONENT_COLLIDER = AVATAR.GetComponent<BoxCollider>(); | |
| 109 | + wordSpeed = defaultWordSpeed.speed; | |
| 110 | + letterSpeed = defaultLetterSpeed.speed; | |
| 111 | + numberSpeed = defaultNumberSpeed.speed; | |
| 112 | + | |
| 113 | + AVATAR = GameObject.FindGameObjectWithTag("avatar");//referencia para o avatar | |
| 114 | + COMPONENT_ANIMATION = AVATAR.GetComponent<Animation>();//referencia para o componente animador do avatar | |
| 115 | + AVATAR_COLLIDER = GameObject.FindGameObjectWithTag("avatar").GetComponent<BoxCollider>(); | |
| 94 | 116 | } |
| 95 | 117 | |
| 96 | - public void SetAvatarCollider(bool active){ | |
| 97 | - COMPONENT_COLLIDER.enabled = active; | |
| 118 | + public bool isLoadingSingleAnimation() { return loadingSingleAnimation; } | |
| 119 | + public bool isLoading() { return loading; } | |
| 120 | + public bool isPlaying() { return playing; } | |
| 121 | + public bool isPaused() { return paused; } | |
| 122 | + | |
| 123 | + public void SetAvatarCollider(bool isActive) | |
| 124 | + { | |
| 125 | + AVATAR_COLLIDER.enabled = isActive; | |
| 98 | 126 | } |
| 99 | 127 | |
| 100 | 128 | protected virtual void setSubtitle(string text) |
| ... | ... | @@ -107,8 +135,9 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 107 | 135 | { |
| 108 | 136 | hSlidersecond = x; |
| 109 | 137 | |
| 110 | - letterSpeed = getProporcionalSpeed(LETTER_DEFAULT_SPEED, LETTER_UNIT_SPEED); | |
| 111 | - numberSpeed = getProporcionalSpeed(NUMBER_DEFAULT_SPEED, NUMBER_UNIT_SPEED); | |
| 138 | + wordSpeed = defaultWordSpeed.getProporcionalSpeed(x); | |
| 139 | + letterSpeed = defaultLetterSpeed.getProporcionalSpeed(x); | |
| 140 | + numberSpeed = defaultNumberSpeed.getProporcionalSpeed(x); | |
| 112 | 141 | |
| 113 | 142 | if ( ! paused) |
| 114 | 143 | foreach (AnimationReference reference in animQueue) |
| ... | ... | @@ -116,20 +145,15 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 116 | 145 | reference.state.speed = getSpeedByType(reference.type); |
| 117 | 146 | } |
| 118 | 147 | |
| 119 | - private float getProporcionalSpeed(float speed, float unit) | |
| 120 | - { | |
| 121 | - return speed + (hSlidersecond - WORD_DEFAULT_SPEED) * unit; | |
| 122 | - } | |
| 123 | - | |
| 124 | 148 | private float getSpeedByType(short type) |
| 125 | 149 | { |
| 126 | 150 | switch (type) |
| 127 | 151 | { |
| 128 | - case TYPE_WORD: return hSlidersecond; | |
| 152 | + case TYPE_WORD: return wordSpeed; | |
| 129 | 153 | case TYPE_LETTER: return letterSpeed; |
| 130 | 154 | case TYPE_NUMBER: return numberSpeed; |
| 131 | 155 | } |
| 132 | - | |
| 156 | + | |
| 133 | 157 | return 2F; |
| 134 | 158 | } |
| 135 | 159 | |
| ... | ... | @@ -159,21 +183,21 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 159 | 183 | } catch (NullReferenceException nre) { Debug.Log("SetQueueList null reff::"+nre.ToString()); } |
| 160 | 184 | |
| 161 | 185 | COMPONENT_ANIMATION.Stop(); |
| 162 | - COMPONENT_ANIMATION.CrossFade(DEFAULT_ANIMATION, FADE_LENGTH, PlayMode.StopAll); | |
| 186 | + COMPONENT_ANIMATION.CrossFade(DEFAULT_ANIMATION, fadeLength, PlayMode.StopAll); | |
| 163 | 187 | } |
| 164 | 188 | |
| 165 | 189 | /* |
| 166 | 190 | * Manda reproduzir animação e adiciona a file de animações a serem reproduzidas. |
| 167 | 191 | * |
| 168 | 192 | * Caso não haja SUBTITLE, name será utilizado como SUBTITLE. |
| 169 | - * Caso não haja fadeLength, será atribuido FADE_LENGTH. | |
| 193 | + * Caso não haja fadeLength, será atribuido fadeLength. | |
| 170 | 194 | * Caso não haja velocidade, hSlidersecond será atribuída. |
| 171 | 195 | */ |
| 172 | 196 | private AnimationState playAnimation(short type, string name, string subtitle, float speed) |
| 173 | 197 | { |
| 174 | 198 | try |
| 175 | 199 | { |
| 176 | - AnimationState state = COMPONENT_ANIMATION.CrossFadeQueued(name, FADE_LENGTH, QueueMode.CompleteOthers); | |
| 200 | + AnimationState state = COMPONENT_ANIMATION.CrossFadeQueued(name, fadeLength, QueueMode.CompleteOthers); | |
| 177 | 201 | state.speed = speed; |
| 178 | 202 | animQueue.Enqueue(new AnimationReference(name, subtitle, state, type)); |
| 179 | 203 | |
| ... | ... | @@ -202,36 +226,63 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 202 | 226 | */ |
| 203 | 227 | protected abstract WWW loadAssetBundle(string aniName); |
| 204 | 228 | |
| 229 | + | |
| 205 | 230 | /** |
| 206 | 231 | * Listen to changes in the playing status. |
| 207 | 232 | */ |
| 208 | 233 | protected abstract void onPlayingStateChange(); |
| 209 | 234 | |
| 210 | - public void play() | |
| 235 | + | |
| 236 | + public void switchPauseState(bool paused) | |
| 211 | 237 | { |
| 212 | - if (playing) | |
| 238 | + if (this.paused != paused) | |
| 213 | 239 | { |
| 214 | - paused = ! paused; | |
| 240 | + this.paused = paused; | |
| 215 | 241 | |
| 216 | 242 | foreach (AnimationReference reference in animQueue) |
| 217 | 243 | if (reference.state != null) |
| 218 | 244 | reference.state.speed = paused ? 0F : getSpeedByType(reference.type); |
| 245 | + | |
| 246 | + onPlayingStateChange(); | |
| 219 | 247 | } |
| 248 | + } | |
| 249 | + public void switchPauseState() | |
| 250 | + { | |
| 251 | + switchPauseState( ! paused); | |
| 252 | + } | |
| 253 | + | |
| 254 | + public bool play() | |
| 255 | + { | |
| 256 | + if (playing) | |
| 257 | + switchPauseState(); | |
| 220 | 258 | else |
| 221 | - { | |
| 222 | - playing = true; | |
| 259 | + play(true, true, true); | |
| 260 | + | |
| 261 | + return true; | |
| 262 | + } | |
| 223 | 263 | |
| 224 | - try{ | |
| 225 | - if (loading) | |
| 264 | + public bool play(bool stopLoading, bool stopPlaying, bool forceLoading) | |
| 265 | + { | |
| 266 | + try { | |
| 267 | + if (loading) | |
| 268 | + { | |
| 269 | + if (stopLoading) | |
| 226 | 270 | stop_animations(); |
| 227 | 271 | else |
| 272 | + return false; | |
| 273 | + } | |
| 274 | + else if (playing) | |
| 275 | + { | |
| 276 | + if (stopPlaying) | |
| 228 | 277 | stopAnimations(); |
| 229 | - } catch (NullReferenceException nre) { nre.ToString(); } | |
| 230 | 278 | |
| 231 | - StartCoroutine("loadAndPlay"); | |
| 232 | - } | |
| 279 | + else if ( ! forceLoading) | |
| 280 | + return false; | |
| 281 | + } | |
| 282 | + } catch (NullReferenceException nre) { nre.ToString(); } | |
| 233 | 283 | |
| 234 | - onPlayingStateChange(); | |
| 284 | + StartCoroutine("loadAndPlay"); | |
| 285 | + return true; | |
| 235 | 286 | } |
| 236 | 287 | |
| 237 | 288 | |
| ... | ... | @@ -279,7 +330,7 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 279 | 330 | bool defaultPlayed = false; |
| 280 | 331 | |
| 281 | 332 | // A reprodução da primeira letra deve ser longa para não ser cortada no fade |
| 282 | - letterSpeed = getProporcionalSpeed(LETTER_FIRST_SPEED, LETTER_FIRST_UNIT_SPEED); | |
| 333 | + letterSpeed = defaultLetterSpeed.getProporcionalSpeed(hSlidersecond); | |
| 283 | 334 | |
| 284 | 335 | for (int i = 0; i < word.Length; i++) |
| 285 | 336 | { |
| ... | ... | @@ -293,11 +344,11 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 293 | 344 | // Se for um número |
| 294 | 345 | else if (second >= 48 && second <= 57) |
| 295 | 346 | playAnimation(TYPE_NUMBER, second.ToString(), lastAnimationSubtitle, numberSpeed); |
| 296 | - | |
| 347 | + | |
| 297 | 348 | // Se for uma vírgula |
| 298 | 349 | else if (second == 44) |
| 299 | 350 | playAnimation(TYPE_WORD, second.ToString(), lastAnimationSubtitle); |
| 300 | - | |
| 351 | + | |
| 301 | 352 | // Não há animação |
| 302 | 353 | else |
| 303 | 354 | { |
| ... | ... | @@ -308,7 +359,7 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 308 | 359 | playAnimation(TYPE_NONE, DEFAULT_ANIMATION, lastAnimationSubtitle); |
| 309 | 360 | |
| 310 | 361 | // A reprodução da próxima letra deve ser longa para não ser cortada no fade |
| 311 | - letterSpeed = getProporcionalSpeed(LETTER_FIRST_SPEED, LETTER_FIRST_UNIT_SPEED); | |
| 362 | + letterSpeed = defaultLetterSpeed.getProporcionalSpeed(hSlidersecond); | |
| 312 | 363 | } |
| 313 | 364 | |
| 314 | 365 | Debug.Log("Animação \"" + second + "\" inexistente."); |
| ... | ... | @@ -316,23 +367,69 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 316 | 367 | } |
| 317 | 368 | |
| 318 | 369 | defaultPlayed = false; |
| 319 | - letterSpeed = getProporcionalSpeed(LETTER_DEFAULT_SPEED, LETTER_UNIT_SPEED); | |
| 370 | + letterSpeed = defaultLetterSpeed.getProporcionalSpeed(hSlidersecond); | |
| 320 | 371 | } |
| 321 | 372 | |
| 322 | 373 | return lastAnimationSubtitle; |
| 323 | 374 | } |
| 324 | 375 | |
| 325 | 376 | |
| 377 | + protected IEnumerator loadAnimation(string name) | |
| 378 | + { | |
| 379 | + loadingSingleAnimation = true; | |
| 380 | + | |
| 381 | + // Função loadAssetBundle é definida pela classe filha | |
| 382 | + WWW www = loadAssetBundle(name); | |
| 383 | + | |
| 384 | + if (www != null) | |
| 385 | + { | |
| 386 | + yield return www; | |
| 387 | + | |
| 388 | + AssetBundle bundle = null; | |
| 389 | + | |
| 390 | + if (www.error == null) | |
| 391 | + bundle = www.assetBundle; | |
| 392 | + | |
| 393 | + if (bundle != null && ! String.IsNullOrEmpty(bundle.mainAsset.name)) | |
| 394 | + { | |
| 395 | + AnimationClip aniClip = bundle.mainAsset as AnimationClip; | |
| 396 | + bundle.Unload(false); | |
| 397 | + | |
| 398 | + if (aniClip) | |
| 399 | + { | |
| 400 | + COMPONENT_ANIMATION.AddClip(aniClip, name); | |
| 401 | + | |
| 402 | + // Reproduz palavra | |
| 403 | + loadedAssetBundles.Add(name); | |
| 404 | + yield break; | |
| 405 | + } | |
| 406 | + else Debug.Log ("Sinal \"" + name + "\" não carregado corretamente."); | |
| 407 | + } | |
| 408 | + } | |
| 409 | + | |
| 410 | + // Soletra palavra | |
| 411 | + nonexistentAssetBundles.Add(name); | |
| 412 | + | |
| 413 | + loadingSingleAnimation = false; | |
| 414 | + } | |
| 415 | + | |
| 416 | + | |
| 326 | 417 | private IEnumerator loadAndPlay() |
| 327 | 418 | { |
| 328 | 419 | loading = true; |
| 420 | + onPlayingStateChange(); | |
| 329 | 421 | |
| 330 | 422 | string lastAnimationSubtitle = ""; |
| 331 | 423 | bool spelled = false; |
| 332 | 424 | |
| 333 | 425 | // Default |
| 334 | 426 | playAnimation(TYPE_NONE, DEFAULT_ANIMATION, "", 2F); |
| 335 | - StartCoroutine("handleStates"); | |
| 427 | + | |
| 428 | + if ( ! playing) | |
| 429 | + { | |
| 430 | + playing = true; | |
| 431 | + StartCoroutine("handleStates"); | |
| 432 | + } | |
| 336 | 433 | |
| 337 | 434 | stringPos = glosa.Split(' '); |
| 338 | 435 | |
| ... | ... | @@ -389,7 +486,6 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 389 | 486 | } |
| 390 | 487 | |
| 391 | 488 | bool isPunctuation = false; |
| 392 | - lastAnimationSubtitle = aniName; | |
| 393 | 489 | |
| 394 | 490 | if (aniName[0] == '[') |
| 395 | 491 | { |
| ... | ... | @@ -410,15 +506,16 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 410 | 506 | isPunctuation = true; |
| 411 | 507 | lastAnimationSubtitle = "!"; |
| 412 | 508 | } |
| 509 | + else | |
| 510 | + { | |
| 511 | + lastAnimationSubtitle = aniName; | |
| 512 | + } | |
| 413 | 513 | } |
| 414 | 514 | |
| 415 | 515 | if (isPunctuation) |
| 416 | 516 | playAnimation(TYPE_WORD, aniName, lastAnimationSubtitle); |
| 417 | 517 | else |
| 418 | 518 | playAnimation(TYPE_WORD, aniName); |
| 419 | - | |
| 420 | - /*playAnimation(TYPE_WORD, aniName); | |
| 421 | - lastAnimationSubtitle = aniName;*/ | |
| 422 | 519 | } |
| 423 | 520 | // Soletra palavra |
| 424 | 521 | else |
| ... | ... | @@ -428,29 +525,33 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 428 | 525 | if ( ! nonexistent) |
| 429 | 526 | nonexistentAssetBundles.Add(aniName); |
| 430 | 527 | |
| 431 | - if (aniName[0] == '[' && (aniName.Equals("[PONTO]") || aniName.Equals("[INTERROGACAO]") || aniName.Equals("[EXCLAMACAO]"))) | |
| 528 | + Debug.Log("~~ To spell: " + aniName); | |
| 529 | + | |
| 530 | + if (aniName.Equals("[PONTO]") || aniName.Equals("[INTERROGACAO]") || aniName.Equals("[EXCLAMACAO]")) | |
| 432 | 531 | { |
| 433 | 532 | playAnimation(TYPE_NONE, DEFAULT_ANIMATION, "", 1.6F); |
| 533 | + continue; | |
| 434 | 534 | } |
| 535 | + | |
| 536 | + // Se já houve o soletramento de alguma palavra, reproduz animação default | |
| 537 | + if (spelled) | |
| 538 | + playAnimation(TYPE_NONE, DEFAULT_ANIMATION, lastAnimationSubtitle, 1.6F); | |
| 435 | 539 | else |
| 436 | - { | |
| 437 | - // Se já houve o soletramento de alguma palavra, reproduz animação default | |
| 438 | - if (spelled) | |
| 439 | - playAnimation(TYPE_NONE, DEFAULT_ANIMATION, lastAnimationSubtitle, 1.6F); | |
| 440 | - else | |
| 441 | - spelled = true; | |
| 540 | + spelled = true; | |
| 442 | 541 | |
| 443 | - lastAnimationSubtitle = spellWord(aniName); | |
| 444 | - } | |
| 542 | + lastAnimationSubtitle = spellWord(aniName); | |
| 445 | 543 | } |
| 446 | 544 | } |
| 447 | 545 | |
| 448 | 546 | // Default |
| 449 | 547 | playAnimation(TYPE_NONE, DEFAULT_ANIMATION, lastAnimationSubtitle); |
| 450 | - loading = false; | |
| 451 | 548 | |
| 549 | + loading = false; | |
| 550 | + onPlayingStateChange(); | |
| 452 | 551 | } |
| 453 | 552 | |
| 553 | + //int _id = 0; | |
| 554 | + | |
| 454 | 555 | /* |
| 455 | 556 | * Sincroniza as legendas com as animações. |
| 456 | 557 | */ |
| ... | ... | @@ -467,9 +568,15 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 467 | 568 | setSubtitle(reference.subtitle); |
| 468 | 569 | |
| 469 | 570 | while (COMPONENT_ANIMATION.IsPlaying(reference.name)) |
| 571 | + { | |
| 572 | + reference.playing = true; | |
| 470 | 573 | yield return null; |
| 574 | + } | |
| 471 | 575 | |
| 472 | - animQueue.Dequeue(); | |
| 576 | + if (reference.state == null) | |
| 577 | + animQueue.Dequeue(); | |
| 578 | + else | |
| 579 | + yield return null; | |
| 473 | 580 | } |
| 474 | 581 | else yield return null; |
| 475 | 582 | |
| ... | ... | @@ -479,19 +586,6 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 479 | 586 | playing = false; |
| 480 | 587 | paused = false; |
| 481 | 588 | onPlayingStateChange(); |
| 482 | - | |
| 483 | - } | |
| 484 | - | |
| 485 | - | |
| 486 | - /* | |
| 487 | - * Chamada quando o player sinaliza UPDATE ou STOP. | |
| 488 | - * Limpa as filas de assets existentes e não existentes | |
| 489 | - * permitindo que novos assets sejam executados | |
| 490 | - */ | |
| 491 | - public void clear() | |
| 492 | - { | |
| 493 | - nonexistentAssetBundles.Clear(); | |
| 494 | - loadedAssetBundles.Clear(); | |
| 495 | 589 | } |
| 496 | 590 | |
| 497 | 591 | } | ... | ... |
Assets/Scripts/PlayerManager.cs
| ... | ... | @@ -48,14 +48,12 @@ public class PlayerManager : GenericPlayerManager { |
| 48 | 48 | // a terceira, para testes com a textbox |
| 49 | 49 | public string catchGlosa() |
| 50 | 50 | { |
| 51 | - glosa = Marshal.PtrToStringAnsi ( coreExecute( ) ); | |
| 52 | - //osa = "PIZZA"; | |
| 53 | - return glosa; | |
| 51 | + return base.glosa = Marshal.PtrToStringAnsi ( coreExecute( ) ); | |
| 54 | 52 | } |
| 55 | 53 | |
| 56 | 54 | public void start_local_play() |
| 57 | 55 | { |
| 58 | - catchGlosa(); | |
| 56 | + this.catchGlosa(); | |
| 59 | 57 | base.play(); |
| 60 | 58 | } |
| 61 | 59 | |
| ... | ... | @@ -78,9 +76,9 @@ public class PlayerManager : GenericPlayerManager { |
| 78 | 76 | |
| 79 | 77 | protected override void onPlayingStateChange() |
| 80 | 78 | { |
| 81 | - if (base.playing) | |
| 79 | + if (base.isPlaying()) | |
| 82 | 80 | { |
| 83 | - playButton.GetComponent<Image>().sprite = base.paused | |
| 81 | + playButton.GetComponent<Image>().sprite = base.isPaused() | |
| 84 | 82 | ? playSprite : pauseSprite; |
| 85 | 83 | |
| 86 | 84 | stopButtonGraphic.color = enabledAlpha; | ... | ... |
ProjectSettings/ProjectSettings.asset
| ... | ... | @@ -115,6 +115,7 @@ PlayerSettings: |
| 115 | 115 | iPhoneTargetOSVersion: 22 |
| 116 | 116 | uIPrerenderedIcon: 0 |
| 117 | 117 | uIRequiresPersistentWiFi: 0 |
| 118 | + uIRequiresFullScreen: 1 | |
| 118 | 119 | uIStatusBarHidden: 1 |
| 119 | 120 | uIExitOnSuspend: 0 |
| 120 | 121 | uIStatusBarStyle: 0 |
| ... | ... | @@ -163,8 +164,10 @@ PlayerSettings: |
| 163 | 164 | m_BuildTargetIcons: |
| 164 | 165 | - m_BuildTarget: |
| 165 | 166 | m_Icons: |
| 166 | - - m_Icon: {fileID: 2800000, guid: 98a8d3ec5bfc6ef4bacfcc810c9edf5a, type: 3} | |
| 167 | - m_Size: 128 | |
| 167 | + - serializedVersion: 2 | |
| 168 | + m_Icon: {fileID: 2800000, guid: 98a8d3ec5bfc6ef4bacfcc810c9edf5a, type: 3} | |
| 169 | + m_Width: 128 | |
| 170 | + m_Height: 128 | |
| 168 | 171 | m_BuildTargetBatching: |
| 169 | 172 | - m_BuildTarget: WebGL |
| 170 | 173 | m_StaticBatching: 1 |
| ... | ... | @@ -261,6 +264,10 @@ PlayerSettings: |
| 261 | 264 | ps4pnGameCustomData: 1 |
| 262 | 265 | playerPrefsSupport: 0 |
| 263 | 266 | ps4ReprojectionSupport: 0 |
| 267 | + ps4UseAudio3dBackend: 0 | |
| 268 | + ps4Audio3dVirtualSpeakerCount: 14 | |
| 269 | + ps4attribCpuUsage: 0 | |
| 270 | + ps4SocialScreenEnabled: 0 | |
| 264 | 271 | ps4attribUserManagement: 0 |
| 265 | 272 | ps4attribMoveSupport: 0 |
| 266 | 273 | ps4attrib3DSupport: 0 | ... | ... |
ProjectSettings/ProjectVersion.txt