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