using Engine.Core; namespace Engine.Systems.Tween; public static class TweenLine2DExtensions { private static readonly BoxedPool boxedLine2DPool = new(2); public static ITween TweenLine2D(this Line2D initialLine2D, ITweenManager tweenManager, float duration, Line2D targetLine2D, System.Action setMethod) { Boxed boxedInitial = boxedLine2DPool.Get(initialLine2D); Boxed boxedTarget = boxedLine2DPool.Get(targetLine2D); ITween tween = tweenManager.StartTween(duration, t => setMethod?.Invoke( new Line2D( boxedInitial.Value.From.Lerp(boxedTarget.Value.From, t), boxedInitial.Value.To.Lerp(boxedTarget.Value.To, t) ) ) ); tween.OnComplete(() => { boxedLine2DPool.Return(boxedInitial); boxedLine2DPool.Return(boxedTarget); }); return tween; } }