using Engine.Core; namespace Engine.Systems.Tween; public static class TweenCircleExtensions { private static readonly BoxedPool boxedCirclePool = new(2); public static ITween TweenCircle(this Circle initialCircle, ITweenManager tweenManager, float duration, Circle targetCircle, System.Action setMethod) { Boxed boxedInitial = boxedCirclePool.Get(initialCircle); Boxed boxedTarget = boxedCirclePool.Get(targetCircle); ITween tween = tweenManager.StartTween(duration, t => setMethod?.Invoke( new Circle( boxedInitial.Value.Center.Lerp(boxedTarget.Value.Center, t), boxedInitial.Value.Diameter.Lerp(boxedTarget.Value.Diameter, t) ) ) ); tween.OnComplete(() => { boxedCirclePool.Return(boxedInitial); boxedCirclePool.Return(boxedTarget); }); return tween; } }