Commit 327ce306a67874148fb10c374dc17fa59eca09de
1 parent
e6b2f819
Exists in
dev
RandomAnimations incompleto
Showing
8 changed files
with
150 additions
and
67 deletions
Show diff stats
No preview for this file type
No preview for this file type
Assets/Scenes/Scene.unity
| ... | ... | @@ -425,7 +425,7 @@ Prefab: |
| 425 | 425 | objectReference: {fileID: 2100000, guid: 3e98fe09c9ac4ae4dbe731872ff7687a, type: 2} |
| 426 | 426 | - target: {fileID: 11474732, guid: 00197fc9877daa14c963e5917de36124, type: 2} |
| 427 | 427 | propertyPath: m_Enabled |
| 428 | - value: 0 | |
| 428 | + value: 1 | |
| 429 | 429 | objectReference: {fileID: 0} |
| 430 | 430 | m_RemovedComponents: [] |
| 431 | 431 | m_ParentPrefab: {fileID: 100100000, guid: 00197fc9877daa14c963e5917de36124, type: 2} |
| ... | ... | @@ -1398,23 +1398,23 @@ Prefab: |
| 1398 | 1398 | objectReference: {fileID: 138791195} |
| 1399 | 1399 | - target: {fileID: 22412692, guid: 12db97f21fb2a7d4cb537ec5395de1b9, type: 2} |
| 1400 | 1400 | propertyPath: m_AnchorMax.x |
| 1401 | - value: 0 | |
| 1401 | + value: .444444448 | |
| 1402 | 1402 | objectReference: {fileID: 0} |
| 1403 | 1403 | - target: {fileID: 22412692, guid: 12db97f21fb2a7d4cb537ec5395de1b9, type: 2} |
| 1404 | 1404 | propertyPath: m_AnchorMax.y |
| 1405 | - value: 0 | |
| 1405 | + value: 1 | |
| 1406 | 1406 | objectReference: {fileID: 0} |
| 1407 | 1407 | - target: {fileID: 22452678, guid: 12db97f21fb2a7d4cb537ec5395de1b9, type: 2} |
| 1408 | 1408 | propertyPath: m_AnchorMin.x |
| 1409 | - value: 0 | |
| 1409 | + value: .444444448 | |
| 1410 | 1410 | objectReference: {fileID: 0} |
| 1411 | 1411 | - target: {fileID: 22452678, guid: 12db97f21fb2a7d4cb537ec5395de1b9, type: 2} |
| 1412 | 1412 | propertyPath: m_AnchorMax.x |
| 1413 | - value: 0 | |
| 1413 | + value: .444444448 | |
| 1414 | 1414 | objectReference: {fileID: 0} |
| 1415 | 1415 | - target: {fileID: 22452678, guid: 12db97f21fb2a7d4cb537ec5395de1b9, type: 2} |
| 1416 | 1416 | propertyPath: m_AnchorMax.y |
| 1417 | - value: 0 | |
| 1417 | + value: 1 | |
| 1418 | 1418 | objectReference: {fileID: 0} |
| 1419 | 1419 | - target: {fileID: 131276, guid: 12db97f21fb2a7d4cb537ec5395de1b9, type: 2} |
| 1420 | 1420 | propertyPath: m_IsActive | ... | ... |
Assets/Scripts/Player Manager/GenericPlayerManager.cs
| ... | ... | @@ -34,7 +34,6 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 34 | 34 | |
| 35 | 35 | private HashSet<string> flags = new HashSet<string>(); |
| 36 | 36 | |
| 37 | - private volatile bool loadingSingleAnimation = false; | |
| 38 | 37 | private volatile bool loading = false; |
| 39 | 38 | private volatile bool playing = false; |
| 40 | 39 | private volatile bool paused = false; |
| ... | ... | @@ -61,7 +60,6 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 61 | 60 | }); |
| 62 | 61 | } |
| 63 | 62 | |
| 64 | - public bool isLoadingSingleAnimation() { return loadingSingleAnimation; } | |
| 65 | 63 | public bool isLoading() { return loading; } |
| 66 | 64 | public bool isPlaying() { return playing; } |
| 67 | 65 | public bool isPaused() { return paused; } |
| ... | ... | @@ -71,13 +69,11 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 71 | 69 | this.flags.Add(flag); |
| 72 | 70 | } |
| 73 | 71 | |
| 74 | - public void playRandomAnimations() { | |
| 75 | - this.randomAnimations.playRandom(); | |
| 76 | - } | |
| 77 | - | |
| 78 | - public void setRandomAnimations(RandomAnimations randomAnimations, string[] flags) { | |
| 72 | + public void setRandomAnimations(RandomAnimations randomAnimations, string[] animationsNames) { | |
| 79 | 73 | this.randomAnimations = randomAnimations; |
| 80 | - this.addFlags(flags); | |
| 74 | + this.addFlags(animationsNames); | |
| 75 | + | |
| 76 | + StartCoroutine("loadIntervalAnimations", animationsNames); | |
| 81 | 77 | } |
| 82 | 78 | |
| 83 | 79 | public void SetAvatarCollider(bool isActive) |
| ... | ... | @@ -141,8 +137,11 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 141 | 137 | animQueue.Clear(); |
| 142 | 138 | } catch (NullReferenceException nre) { UnityEngine.Debug.Log("SetQueueList null reff::"+nre.ToString()); } |
| 143 | 139 | |
| 144 | - COMPONENT_ANIMATION.Stop(); | |
| 145 | - COMPONENT_ANIMATION.CrossFade(DEFAULT_ANIMATION, fadeLength, PlayMode.StopAll); | |
| 140 | + if ( ! this.randomAnimations.isPlaying()) | |
| 141 | + { | |
| 142 | + COMPONENT_ANIMATION.Stop(); | |
| 143 | + COMPONENT_ANIMATION.CrossFade(DEFAULT_ANIMATION, fadeLength, PlayMode.StopAll); | |
| 144 | + } | |
| 146 | 145 | } |
| 147 | 146 | |
| 148 | 147 | /* |
| ... | ... | @@ -172,6 +171,36 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 172 | 171 | return playAnimation(type, name, name); |
| 173 | 172 | } |
| 174 | 173 | |
| 174 | + private int pra_id = 0; | |
| 175 | + | |
| 176 | + public void playRandomAnimation(string name) | |
| 177 | + { | |
| 178 | + pra_id++; | |
| 179 | + Debug.Log(pra_id + ". " + name); | |
| 180 | + | |
| 181 | + AnimationState state = COMPONENT_ANIMATION.CrossFadeQueued(DEFAULT_ANIMATION, fadeLength, QueueMode.CompleteOthers); | |
| 182 | + state.speed = 2F; | |
| 183 | + | |
| 184 | + COMPONENT_ANIMATION.CrossFadeQueued(name, fadeLength, QueueMode.CompleteOthers); | |
| 185 | + StartCoroutine("randomAnimationWatcher", name); | |
| 186 | + | |
| 187 | + COMPONENT_ANIMATION.CrossFadeQueued(DEFAULT_ANIMATION, fadeLength, QueueMode.CompleteOthers); | |
| 188 | + } | |
| 189 | + | |
| 190 | + IEnumerator randomAnimationWatcher(string name) | |
| 191 | + { | |
| 192 | + while (COMPONENT_ANIMATION.IsPlaying(DEFAULT_ANIMATION)) | |
| 193 | + yield return null; | |
| 194 | + | |
| 195 | + while (COMPONENT_ANIMATION.IsPlaying(name)) | |
| 196 | + { | |
| 197 | + Debug.Log(pra_id + ". Playing " + name); | |
| 198 | + yield return null; | |
| 199 | + } | |
| 200 | + | |
| 201 | + this.randomAnimations.setPlaying(false); | |
| 202 | + } | |
| 203 | + | |
| 175 | 204 | |
| 176 | 205 | /** |
| 177 | 206 | * Returns the asset bundle named aniName. |
| ... | ... | @@ -206,6 +235,11 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 206 | 235 | switchPauseState( ! paused); |
| 207 | 236 | } |
| 208 | 237 | |
| 238 | + /* | |
| 239 | + * Ordena o carregamento da glosa. | |
| 240 | + * Se estiver reproduzindo: pausa, se não: interrompe outros carregamentos e | |
| 241 | + * ordena o carregamento da glosa. | |
| 242 | + */ | |
| 209 | 243 | public bool play() |
| 210 | 244 | { |
| 211 | 245 | if (playing) |
| ... | ... | @@ -222,6 +256,13 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 222 | 256 | return this.play(); |
| 223 | 257 | } |
| 224 | 258 | |
| 259 | + /* | |
| 260 | + * Ordena o carregamento da glosa de forma condicional. | |
| 261 | + * @param stopLoading - Se estiver carregando uma glosa, interrompe e carrega a atual; | |
| 262 | + * @param stopPlaying - Se estiver reproduzindo animações, interrompe e carrega a glosa; | |
| 263 | + * @param forceLoading - Se estiver reproduzindo animações, mas stopPlaying não estiver | |
| 264 | + * ativo, carrega as animações colocando-as na fila. | |
| 265 | + */ | |
| 225 | 266 | public bool play(bool stopLoading, bool stopPlaying, bool forceLoading) |
| 226 | 267 | { |
| 227 | 268 | try { |
| ... | ... | @@ -301,43 +342,53 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 301 | 342 | } |
| 302 | 343 | |
| 303 | 344 | |
| 304 | - protected IEnumerator loadAnimation(string name) | |
| 345 | + protected IEnumerator loadIntervalAnimations(string[] animationsNames) | |
| 305 | 346 | { |
| 306 | - loadingSingleAnimation = true; | |
| 347 | + foreach (string name in animationsNames) | |
| 348 | + { | |
| 349 | + bool nonexistent = nonexistentAssetBundles.Contains(name); | |
| 350 | + bool loaded = loadedAssetBundles.Contains(name); | |
| 307 | 351 | |
| 308 | - // Função loadAssetBundle é definida pela classe filha | |
| 309 | - WWW www = loadAssetBundle(name); | |
| 352 | + if ( ! nonexistent && ! loaded) | |
| 353 | + { | |
| 354 | + WWW www = loadAssetBundle(name); | |
| 310 | 355 | |
| 311 | - if (www != null) | |
| 312 | - { | |
| 313 | - yield return www; | |
| 356 | + if (www != null) | |
| 357 | + { | |
| 358 | + yield return www; | |
| 314 | 359 | |
| 315 | - AssetBundle bundle = null; | |
| 360 | + AssetBundle bundle = null; | |
| 316 | 361 | |
| 317 | - if (www.error == null) | |
| 318 | - bundle = www.assetBundle; | |
| 362 | + if (www.error == null) | |
| 363 | + bundle = www.assetBundle; | |
| 319 | 364 | |
| 320 | - if (bundle != null && ! String.IsNullOrEmpty(bundle.mainAsset.name)) | |
| 321 | - { | |
| 322 | - AnimationClip aniClip = bundle.mainAsset as AnimationClip; | |
| 323 | - bundle.Unload(false); | |
| 365 | + if (bundle != null && ! String.IsNullOrEmpty(bundle.mainAsset.name)) | |
| 366 | + { | |
| 367 | + AnimationClip aniClip = bundle.mainAsset as AnimationClip; | |
| 368 | + bundle.Unload(false); | |
| 324 | 369 | |
| 325 | - if (aniClip) | |
| 326 | - { | |
| 327 | - COMPONENT_ANIMATION.AddClip(aniClip, name); | |
| 370 | + if (aniClip) | |
| 371 | + { | |
| 372 | + COMPONENT_ANIMATION.AddClip(aniClip, name); | |
| 373 | + | |
| 374 | + // Reproduz palavra | |
| 375 | + loadedAssetBundles.Add(name); | |
| 376 | + loaded = true; | |
| 377 | + } | |
| 378 | + else UnityEngine.Debug.Log ("Sinal \"" + name + "\" não carregado corretamente."); | |
| 379 | + } | |
| 380 | + } | |
| 328 | 381 | |
| 329 | - // Reproduz palavra | |
| 330 | - loadedAssetBundles.Add(name); | |
| 331 | - yield break; | |
| 382 | + // Soletra palavra | |
| 383 | + if ( ! loaded) | |
| 384 | + { | |
| 385 | + nonexistentAssetBundles.Add(name); | |
| 386 | + nonexistent = true; | |
| 332 | 387 | } |
| 333 | - else UnityEngine.Debug.Log ("Sinal \"" + name + "\" não carregado corretamente."); | |
| 334 | 388 | } |
| 335 | 389 | } |
| 336 | 390 | |
| 337 | - // Soletra palavra | |
| 338 | - nonexistentAssetBundles.Add(name); | |
| 339 | - | |
| 340 | - loadingSingleAnimation = false; | |
| 391 | + StartCoroutine(this.randomAnimations.playRandom()); | |
| 341 | 392 | } |
| 342 | 393 | |
| 343 | 394 | |
| ... | ... | @@ -474,7 +525,7 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 474 | 525 | */ |
| 475 | 526 | IEnumerator handleStates() |
| 476 | 527 | { |
| 477 | - if (this.randomAnimations != null) this.randomAnimations.stop(); | |
| 528 | + if (this.randomAnimations != null) this.randomAnimations.setRunning(false); | |
| 478 | 529 | |
| 479 | 530 | // Enquanto estiver executando a rotina "loadAndPlay" |
| 480 | 531 | // ou existir animações na fila de reprodução |
| ... | ... | @@ -506,7 +557,7 @@ public abstract class GenericPlayerManager : MonoBehaviour { |
| 506 | 557 | paused = false; |
| 507 | 558 | onPlayingStateChange(); |
| 508 | 559 | |
| 509 | - if (this.randomAnimations != null) this.randomAnimations.play(); | |
| 560 | + if (this.randomAnimations != null) this.randomAnimations.setRunning(true); | |
| 510 | 561 | } |
| 511 | 562 | |
| 512 | 563 | } | ... | ... |
Assets/Scripts/Player Manager/RandomAnimations.cs
| 1 | 1 | using UnityEngine; |
| 2 | +using System.Collections; | |
| 2 | 3 | using UnityEngine.UI; |
| 3 | 4 | |
| 4 | -public class RandomAnimations { | |
| 5 | +public class RandomAnimations : MonoBehaviour { | |
| 5 | 6 | |
| 6 | 7 | private GenericPlayerManager playerManager; |
| 7 | 8 | private string[] names = new string[] {}; |
| ... | ... | @@ -10,7 +11,7 @@ public class RandomAnimations { |
| 10 | 11 | |
| 11 | 12 | private int lastIndex = -1; |
| 12 | 13 | private bool running = true; |
| 13 | - | |
| 14 | + private bool playing = false; | |
| 14 | 15 | |
| 15 | 16 | public RandomAnimations(GenericPlayerManager playerManager, string[] animations, int time, float probability) |
| 16 | 17 | { |
| ... | ... | @@ -18,47 +19,64 @@ public class RandomAnimations { |
| 18 | 19 | this.names = animations; |
| 19 | 20 | this.time = time; |
| 20 | 21 | this.probability = probability; |
| 21 | - | |
| 22 | - playerManager.Invoke("playRandomAnimations", this.time); | |
| 23 | 22 | } |
| 24 | 23 | |
| 25 | - | |
| 26 | - public void stop() { | |
| 27 | - this.running = false; | |
| 24 | + public bool isPlaying() { | |
| 25 | + return this.playing; | |
| 28 | 26 | } |
| 29 | 27 | |
| 30 | - public void play() { | |
| 31 | - this.running = true; | |
| 32 | - playerManager.Invoke("playRandomAnimations", this.time); | |
| 28 | + public void setPlaying(bool playing) { | |
| 29 | + this.playing = playing; | |
| 33 | 30 | } |
| 34 | 31 | |
| 35 | - private void playAnimation(string glosa) | |
| 36 | - { | |
| 37 | - this.playerManager.play(glosa); | |
| 32 | + public void setRunning(bool running) { | |
| 33 | + this.running = running; | |
| 38 | 34 | } |
| 39 | 35 | |
| 40 | - public void playRandom() | |
| 36 | + int _id = 0; | |
| 37 | + | |
| 38 | + public IEnumerator playRandom() | |
| 41 | 39 | { |
| 42 | - if (running) | |
| 40 | + yield return new WaitForSeconds(this.time); | |
| 41 | + | |
| 42 | + while (true) | |
| 43 | 43 | { |
| 44 | + while ( ! this.running) | |
| 45 | + yield return new WaitForSeconds(1); | |
| 46 | + | |
| 47 | + if (this.playing) | |
| 48 | + { | |
| 49 | + while (this.playing) | |
| 50 | + yield return new WaitForSeconds(1); | |
| 51 | + | |
| 52 | + yield return new WaitForSeconds(this.time); | |
| 53 | + } | |
| 54 | + | |
| 44 | 55 | int index = sortIndex(); |
| 45 | 56 | |
| 46 | 57 | if (index != -1) |
| 47 | 58 | { |
| 48 | - if (index == lastIndex) | |
| 49 | - index = sortIndex(); | |
| 59 | + if (index == this.lastIndex) | |
| 60 | + index = sortIndex(1F); | |
| 50 | 61 | |
| 51 | - playAnimation(this.names[index]); | |
| 52 | - } | |
| 62 | + Debug.Log(_id++ + ". Calling playRandomAnimation for " + this.names[index]); | |
| 63 | + this.playing = true; | |
| 64 | + this.playerManager.playRandomAnimation(this.names[index]); | |
| 53 | 65 | |
| 54 | - playerManager.Invoke("playRandomAnimations", this.time); | |
| 66 | + this.lastIndex = index; | |
| 67 | + yield return null; | |
| 68 | + } | |
| 69 | + else yield return new WaitForSeconds(this.time); | |
| 55 | 70 | } |
| 56 | 71 | } |
| 57 | 72 | |
| 58 | - private int sortIndex() | |
| 73 | + private int sortIndex(float probability) | |
| 59 | 74 | { |
| 60 | - int rand = new System.Random().Next((int) (this.names.Length / this.probability)); | |
| 75 | + int rand = new System.Random().Next((int) (this.names.Length / probability)); | |
| 61 | 76 | return rand < this.names.Length ? rand : -1; |
| 62 | 77 | } |
| 78 | + private int sortIndex() { | |
| 79 | + return sortIndex(this.probability); | |
| 80 | + } | |
| 63 | 81 | |
| 64 | 82 | } |
| 65 | 83 | \ No newline at end of file | ... | ... |
Assets/Scripts/PlayerManager.cs
| ... | ... | @@ -46,7 +46,7 @@ public class PlayerManager : GenericPlayerManager { |
| 46 | 46 | stopButtonGraphic = stopButton.GetComponent<Graphic>(); |
| 47 | 47 | stopButtonGraphic.color = disabledAlpha; |
| 48 | 48 | |
| 49 | - base.setRandomAnimations(new RandomAnimations(this, randomAnimationNames, 2, 1F), randomAnimationNames); | |
| 49 | + base.setRandomAnimations(new RandomAnimations(this, randomAnimationNames, 3, 1F), randomAnimationNames); | |
| 50 | 50 | base.Start(); |
| 51 | 51 | } |
| 52 | 52 | |
| ... | ... | @@ -60,7 +60,8 @@ public class PlayerManager : GenericPlayerManager { |
| 60 | 60 | |
| 61 | 61 | public void start_local_play() |
| 62 | 62 | { |
| 63 | - this.catchGlosa(); | |
| 63 | + base.glosa = "APURAR AQUILO"; | |
| 64 | + //this.catchGlosa(); | |
| 64 | 65 | base.play(); |
| 65 | 66 | } |
| 66 | 67 | ... | ... |