using System.Collections; using System.Collections.Generic; using UnityEngine; namespace YKMoon.Tween { public partial class YKTweenManager : USingletonMono { private List tweens = new List(); protected void StartTween(YKTween tween) { if (tween == null) { return; } if(!tweens.Contains(tween)) { tweens.Add(tween); } } public void StopTween(YKTween tween, bool callFinishEvent = true) { if (tween == null) { return; } if (callFinishEvent) { tween.Finish(true); } removeList.Enqueue(tween); } public void Kill(YKTween tween) { if (tween == null) { return; } StopTween(tween, false); } private Queue removeList = new Queue(); private void Update() { while(removeList.Count > 0) { tweens.Remove(removeList.Dequeue()); } List copyTweens = ListPool.Get(); copyTweens.AddRange(tweens); foreach(var tween in copyTweens) { if (tween == null) { continue; } if(!tween.IsValid()) { removeList.Enqueue(tween); continue; } tween.Update(Time.deltaTime, Time.unscaledDeltaTime); if(tween.IsFinished()) { tween.Finish(true); removeList.Enqueue(tween); continue; } } ListPool.Release(copyTweens); } } }