提交修改
This commit is contained in:
@@ -1,191 +0,0 @@
|
||||
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>();
|
||||
}
|
||||
}
|
||||
|
||||
#if UNITY_2019_3_OR_NEWER
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
|
||||
static void InitializeOnLoad()
|
||||
{
|
||||
_tweenerPool.Clear();
|
||||
_activeTweens = new GTweener[30];
|
||||
_totalActiveTweens = 0;
|
||||
_inited = false;
|
||||
}
|
||||
#endif
|
||||
|
||||
class TweenEngine : MonoBehaviour
|
||||
{
|
||||
void Update()
|
||||
{
|
||||
TweenManager.Update();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user