123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- using System.Collections.Generic;
- using UnityEngine;
- namespace FairyGUI
- {
- internal static class TweenManager
- {
- static GTweener[] _activeTweens = new GTweener[30];
- static List<GTweener> _tweenerPool = new List<GTweener>(30);
- static int _totalActiveTweens = 0;
- static bool _inited = false;
- internal static GTweener CreateTween()
- {
- if (!_inited)
- Init();
- GTweener tweener;
- int cnt = _tweenerPool.Count;
- if (cnt > 0)
- {
- tweener = _tweenerPool[cnt - 1];
- _tweenerPool.RemoveAt(cnt - 1);
- }
- else
- tweener = new GTweener();
- tweener._Init();
- _activeTweens[_totalActiveTweens++] = tweener;
- if (_totalActiveTweens == _activeTweens.Length)
- {
- GTweener[] newArray = new GTweener[_activeTweens.Length + Mathf.CeilToInt(_activeTweens.Length * 0.5f)];
- _activeTweens.CopyTo(newArray, 0);
- _activeTweens = newArray;
- }
- return tweener;
- }
- internal static bool IsTweening(object target, TweenPropType propType)
- {
- if (target == null)
- return false;
- bool anyType = propType == TweenPropType.None;
- for (int i = 0; i < _totalActiveTweens; i++)
- {
- GTweener tweener = _activeTweens[i];
- if (tweener != null && tweener.target == target && !tweener._killed
- && (anyType || tweener._propType == propType))
- return true;
- }
- return false;
- }
- internal static bool KillTweens(object target, TweenPropType propType, bool completed)
- {
- if (target == null)
- return false;
- bool flag = false;
- int cnt = _totalActiveTweens;
- bool anyType = propType == TweenPropType.None;
- for (int i = 0; i < cnt; i++)
- {
- GTweener tweener = _activeTweens[i];
- if (tweener != null && tweener.target == target && !tweener._killed
- && (anyType || tweener._propType == propType))
- {
- tweener.Kill(completed);
- flag = true;
- }
- }
- return flag;
- }
- internal static GTweener GetTween(object target, TweenPropType propType)
- {
- if (target == null)
- return null;
- int cnt = _totalActiveTweens;
- bool anyType = propType == TweenPropType.None;
- for (int i = 0; i < cnt; i++)
- {
- GTweener tweener = _activeTweens[i];
- if (tweener != null && tweener.target == target && !tweener._killed
- && (anyType || tweener._propType == propType))
- {
- return tweener;
- }
- }
- return null;
- }
- internal static void Update()
- {
- int cnt = _totalActiveTweens;
- int freePosStart = -1;
- for (int i = 0; i < cnt; i++)
- {
- GTweener tweener = _activeTweens[i];
- if (tweener == null)
- {
- if (freePosStart == -1)
- freePosStart = i;
- }
- else if (tweener._killed)
- {
- tweener._Reset();
- _tweenerPool.Add(tweener);
- _activeTweens[i] = null;
- if (freePosStart == -1)
- freePosStart = i;
- }
- else
- {
- if ((tweener._target is GObject) && ((GObject)tweener._target)._disposed)
- tweener._killed = true;
- else if (!tweener._paused)
- tweener._Update();
- if (freePosStart != -1)
- {
- _activeTweens[freePosStart] = tweener;
- _activeTweens[i] = null;
- freePosStart++;
- }
- }
- }
- if (freePosStart >= 0)
- {
- if (_totalActiveTweens != cnt) //new tweens added
- {
- int j = cnt;
- cnt = _totalActiveTweens - cnt;
- for (int i = 0; i < cnt; i++)
- {
- _activeTweens[freePosStart++] = _activeTweens[j];
- _activeTweens[j] = null;
- j++;
- }
- }
- _totalActiveTweens = freePosStart;
- }
- }
- internal static void Clean()
- {
- _tweenerPool.Clear();
- }
- static void Init()
- {
- _inited = true;
- if (Application.isPlaying)
- {
- GameObject gameObject = new GameObject("[FairyGUI.TweenManager]");
- gameObject.hideFlags = HideFlags.HideInHierarchy;
- gameObject.SetActive(true);
- Object.DontDestroyOnLoad(gameObject);
- gameObject.AddComponent<TweenEngine>();
- }
- }
- class TweenEngine : MonoBehaviour
- {
- void Update()
- {
- TweenManager.Update();
- }
- }
- }
- }
|